Django工程讀取mongodb並使用分頁器

来源:http://www.cnblogs.com/kylinlin/archive/2016/02/08/5184934.html
-Advertisement-
Play Games

pycharm開發django工程(二) 項目需求: 1. 從mongodb中讀取數據,並顯示到網頁中 2. 在網頁顯示的每一頁加入分頁符 首先使用pycharm的企業版新建一個django的虛擬工程(參考我的上一個博客),這是初始的顯示效果 這是原始的html文件,css文件在本文的最後,至於圖片...


pycharm開發django工程(二)

 

項目需求:

1. 從mongodb中讀取數據,並顯示到網頁中

2. 在網頁顯示的每一頁加入分頁符

 

首先使用pycharm的企業版新建一個django的虛擬工程(參考我的上一個博客),這是初始的顯示效果

clip_image002

這是原始的html文件,css文件在本文的最後,至於圖片就隨意照一張改名就行

{% load static %}

<html lang="en">

<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta name="description" content="A layout example that shows off a blog page with a list of posts.">
    <title>Blog &ndash; Layout Examples &ndash; Pure</title>
    <link rel="stylesheet" href="http://yui.yahooapis.com/pure/0.6.0/pure-min.css' %}">
    <link rel="stylesheet" href="http://yui.yahooapis.com/pure/0.6.0/grids-responsive-old-ie-min.css' %}">
    <link rel="stylesheet" href="http://yui.yahooapis.com/pure/0.6.0/grids-responsive-min.css' %}">
    <link rel="stylesheet" href="{% static 'css/layouts/blog-old-ie.css' %}">
    <link rel="stylesheet" href="{% static 'css/layouts/blog.css' %}">
</head>

<body>

<div class="content pure-u-1 pure-u-md-3-4">
    <div>
        <!-- A wrapper for all the blog posts -->
        <div class="posts">
            <h1 class="content-subhead">Pinned Post</h1>
            <!-- A single blog post -->

            <section class="post">
                <header class="post-header">
                    <img class="post-avatar" alt="Tilo Mitra&#x27;s avatar" height="48" width="48"
                         src="{% static 'img/common/tilo-avatar.png' %}">
                    <h2 class="post-title">Introducing Pure</h2>
                    <p class="post-meta">
                        By <a href="#" class="post-author">Tilo Mitra</a> under <a
                            class="post-category post-category-design" href="#">CSS</a> <a
                            class="post-category post-category-pure" href="#">Pure</a>
                    </p>
                </header>

                <div class="post-description">
                    <p>

                        Yesterday at CSSConf, we launched Pure – a new CSS library. Phew! Here are the <a
                            href="https://speakerdeck.com/tilomitra/pure-bliss">slides from the presentation</a>.
                        Although it looks pretty minimalist, we’ve been working on Pure for several months. After many
                        iterations, we have released Pure as a set of small, responsive, CSS modules that you can use in
                        every web project.
                    </p>
                </div>
            </section>
        </div>
    </div>
</div>
</body>
</html>

首先要安裝mongoengine

pip3 install mongoengine
然後在settings.py文件中定義mongodb的連接(要連接的mongodb資料庫名為test,使用到的是test資料庫里的一張名為sample的表)
from mongoengine import connect 
connect('test', host='127.0.0.1', port=27017)

 

在models.py文件中定義讀取的資料庫欄位

from django.db import models 
from mongoengine import * 

connect('test', host='127.0.0.1', port=27017) # 指明要連接的資料庫 

class ArtiInfo(Document): 
    title = StringField() 
    url = StringField() 
    price = StringField() 
    pub_date = StringField() 
    look = StringField() 
    area = ListField(StringField()) # 定義列表類型 
    cates = ListField(StringField()) 

    meta = { 'collection': 'sample'} # 指明連接資料庫的哪張表 

for i in ArtiInfo.objects[:10]: # 測試是否連接成功 
    print(i.title)

在這裡可以直接運行models.py文件,看是否能讀出資料庫里的內容,註意要把資料庫中的欄位全部定義出來

 

修改views.py文件,定義要傳遞到html文件中的內容

from django.shortcuts import render 
from myblog.models import ArtiInfo 

def index(request): 
    article = ArtiInfo.objects[:10] #只顯示前10個內容 
    context = { 
        'ArtiInfo':article 
    } 

    return render(request, 'index.html', context) # 傳遞context參數

 

修改index.html文件,在文件中迴圈顯示從資料庫中讀取的數據

{% load static %}
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta name="description" content="A layout example that shows off a blog page with a list of posts.">
    <title>Blog &ndash; Layout Examples &ndash; Pure</title>
    <link rel="stylesheet" href="http://yui.yahooapis.com/pure/0.6.0/pure-min.css' %}">
    <link rel="stylesheet" href="http://yui.yahooapis.com/pure/0.6.0/grids-responsive-old-ie-min.css' %}">
    <link rel="stylesheet" href="http://yui.yahooapis.com/pure/0.6.0/grids-responsive-min.css' %}">
    <link rel="stylesheet" href="{% static 'css/layouts/blog-old-ie.css' %}">
    <link rel="stylesheet" href="{% static 'css/layouts/blog.css' %}">
</head>

<body>

<div class="content pure-u-1 pure-u-md-3-4">
    <div>
        <!-- A wrapper for all the blog posts -->
        <div class="posts">
            <h1 class="content-subhead">Pinned Post</h1>
            {% for item in ArtiInfo %}
                <!-- A single blog post -->
                <section class="post">
                    <header class="post-header">
                        <img class="post-avatar" alt="Tilo Mitra&#x27;s avatar" height="48" width="48"
                             src="{% static 'img/common/tilo-avatar.png' %}">
                        <h3 class="post-title">{{ item.title }}</h3>
                        <p class="post-meta">
                            By <a href="#" class="post-author">{{ item.pub_date }}</a>
                            {% for each in item.cates %}
                                <a class="post-category post-category-design" href="#">{{ each }}</a>
                            {% endfor %}
                        </p>
                    </header>

                    <div class="post-description">
                        <p>
                            {{ item.url }}
                        </p>
                    </div>
                </section>
            {% endfor %}
        </div>
    </div>
</div>
</body>
</html>

 

這是從資料庫里讀取的效果

clip_image004

 

添加分頁器

 

在上面的views.py文件中添加分頁器

from django.shortcuts import render 
from myblog.models import ArtiInfo 
from django.core.paginator import Paginator 

def index(request): 
    limit = 1 #限制每一頁顯示的條目數量 
    article = ArtiInfo.objects 
    paginator = Paginator(article, limit) 
    page_num = request.GET.get('page', 1) #從url中獲取頁碼參數 
    loaded = paginator.page(page_num) 

    context = { 
        'ArtiInfo':loaded 
    } 

    return render(request, 'index.html', context)

 

在Index.html文件的末尾處添加分頁器

{% load static %}
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta name="description" content="A layout example that shows off a blog page with a list of posts.">
    <title>Blog &ndash; Layout Examples &ndash; Pure</title>
    <link rel="stylesheet" href="http://yui.yahooapis.com/pure/0.6.0/pure-min.css' %}">
    <link rel="stylesheet" href="http://yui.yahooapis.com/pure/0.6.0/grids-responsive-old-ie-min.css' %}">
    <link rel="stylesheet" href="http://yui.yahooapis.com/pure/0.6.0/grids-responsive-min.css' %}">
    <link rel="stylesheet" href="{% static 'css/layouts/blog-old-ie.css' %}">
    <link rel="stylesheet" href="{% static 'css/layouts/blog.css' %}">
</head>
<body>

    <div class="content pure-u-1 pure-u-md-3-4">
        <div>
            <!-- A wrapper for all the blog posts -->
            <div class="posts">
                <h1 class="content-subhead">Pinned Post</h1>
                {% for item in ArtiInfo %}
                <!-- A single blog post -->
                <section class="post">
                    <header class="post-header">
                        <img class="post-avatar" alt="Tilo Mitra&#x27;s avatar" height="48" width="48" src="{% static 'img/common/tilo-avatar.png' %}">

                        <h3 class="post-title">{{ item.title }}</h3>

                        <p class="post-meta">
                            By <a href="#" class="post-author">{{ item.pub_date }}</a>
                            {% for each in item.cates %}
                                <a class="post-category post-category-design" href="#">{{ each }}</a>
                            {% endfor %}
                        </p>
                    </header>

                    <div class="post-description">
                        <p>
                            {{ item.url }}
                        </p>
                    </div>
                </section>
                {% endfor %}
            </div>
        <div class="main-content-pagitor">
            {% if ArtiInfo.has_previous %}
                <a href="?page={{ ArtiInfo.previous_page_number }}"> 上一頁</a>
            {% endif %}
            <span>{{ ArtiInfo.number }} of {{ ArtiInfo.paginator.num_pages }}</span>
            {% if ArtiInfo.has_next %}
                <a href="?page={{ ArtiInfo.next_page_number }}">下一頁</a>
            {% endif %}
        </div>
        </div>
    </div>

</body>
</html>

 

 

這是最終的顯示效果

clip_image006

本文中使用到的css文件如下:

* {
    -webkit-box-sizing: border-box;
    -moz-box-sizing: border-box;
    box-sizing: border-box;
}

a {
    text-decoration: none;
    color: rgb(61, 146, 201);
}
a:hover,
a:focus {
    text-decoration: underline;
}

h3 {
    font-weight: 100;
}

/* LAYOUT CSS */
.pure-img-responsive {
    max-width: 100%;
    height: auto;
}

#layout {
    padding: 0;
}

.header {
    text-align: center;
    top: auto;
    margin: 3em auto;
}

.sidebar {
    background: rgb(61, 79, 93);
    color: #fff;
}

.brand-title,
.brand-tagline {
    margin: 0;
}
.brand-title {
    text-transform: uppercase;
}
.brand-tagline {
    font-weight: 300;
    color: rgb(176, 202, 219);
}

.nav-list {
    margin: 0;
    padding: 0;
    list-style: none;
}
.nav-item {
    display: inline-block;
    *display: inline;
    zoom: 1;
}
.nav-item a {
    background: transparent;
    border: 2px solid rgb(176, 202, 219);
    color: #fff;
    margin-top: 1em;
    letter-spacing: 0.05em;
    text-transform: uppercase;
    font-size: 85%;
}
.nav-item a:hover,
.nav-item a:focus {
    border: 2px solid rgb(61, 146, 201);
    text-decoration: none;
}

.content-subhead {
    text-transform: uppercase;
    color: #aaa;
    border-bottom: 1px solid #eee;
    padding: 0.4em 0;
    font-size: 80%;
    font-weight: 500;
    letter-spacing: 0.1em;
}

.content {
    padding: 2em 1em 0;
}

.post {
    padding-bottom: 2em;
}
.post-title {
    font-size: 2em;
    color: #222;
    margin-bottom: 0.2em;
}
.post-avatar {
    border-radius: 50px;
    float: right;
    margin-left: 1em;
}
.post-description {
    font-family: Georgia, "Cambria", serif;
    color: #444;
    line-height: 1.8em;
}
.post-meta {
    color: #999;
    font-size: 90%;
    margin: 0;
}

.post-category {
    margin: 0 0.1em;
    padding: 0.3em 1em;
    color: #fff;
    background: #999;
    font-size: 80%;
}
    .post-category-design {
        background: #5aba59;
    }
    .post-category-pure {
        background: #4d85d1;
    }
    .post-category-yui {
        background: #8156a7;
    }
    .post-category-js {
        background: #df2d4f;
    }

.post-images {
    margin: 1em 0;
}
.post-image-meta {
    margin-top: -3.5em;
    margin-left: 1em;
    color: #fff;
    text-shadow: 0 1px 1px #333;
}

.footer {
    text-align: center;
    padding: 1em 0;
}
.footer a {
    color: #ccc;
    font-size: 80%;
}
.footer .pure-menu a:hover,
.footer .pure-menu a:focus {
    background: none;
}

@media (min-width: 48em) {
    .content {
        padding: 2em 3em 0;
        margin-left: 25%;
    }

    .header {
        margin: 80% 2em 0;
        text-align: right;
    }

    .sidebar {
        position: fixed;
        top: 0;
        bottom: 0;
    }
}

.main-content-pagitor  {
    width: 50%;
    padding: 10px 20px 5px 20px;
    overflow: auto;
    margin: auto;
    /*position: relative;*/
    text-align: center;
}
.main-content-pagitor a {
    color: #cccccc;
    padding: 0 5px 0 5px;
}
.main-content-pagitor span {
    color: #585858;

    /*padding: 20px 20px 20px 20px;*/

}

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 分類:C#、Android、VS2015、百度地圖應用; 創建日期:2016-02-04 一、簡介 POI(Point of Interest),中文可以翻譯為“興趣點”。在地理信息系統中,一個POI可以是一棟房子、一個商鋪、一個郵筒、一個公交站等。 1、POI檢索 百度地圖SDK提供三種類型的PO
  • 微軟一統 Windows 10 的音頻和 MIDI API 微軟在夏季NAMM上的A3E大會上做了主題演講,他們對Windows 10的音頻和MIDI API都做了新的規劃,開發者針對Windows 10開發的應用在手機、平板、桌面電腦、Raspberry Pi 2上也可以運行。 微軟之前在音頻方面
  • 基本概念 塊設備(blockdevice) --- 是一種具有一定結構的隨機存取設備,對這種設備的讀寫是按塊進行的,他使用緩衝區來存放暫時的數據,待條件成熟後,從緩存一次性寫入設備或者從設備一次性讀到緩衝區。 字元設備(Character device) ---是一個順序的數據流設備,對這種設備的讀
  • 如果沒記錯的話,阿裡雲ECS上的Ubuntu也是LTS版本。 如果還在使用較舊版本的Ubuntu,或者是Ubuntu LTS,那麼我們是很難體驗新版gcc的。怎麼辦呢? 我們或許可以自己去編譯用舊版本的gcc去編譯新版本,但比較繁瑣而且坑點較多。如果有現成的包就好啦! 原來,在toolchain/t
  • 丙申年把真假美猴王囚禁在容器中跑 ASP.NET Core 1.0¶警告您當前查看的頁面是未經授權的轉載! 如果當前版本排版錯誤,請前往查看最新版本:http://www.cnblogs.com/qin-nz/p/aspnetcore-run-on-mono-in-year-of-monkey.ht...
  • 之前就是說過“一個項目有很多重要的步驟以及功能”,那我們現在就來看看對於KTV項目來說;後臺是處於什麼樣的重要作用! 首先就得瞭解KTV後臺的一些功能了: 1.歌曲管理 、歌手管理 、設置資源路徑 2.新增歌手、歌手查詢、新增歌曲、歌曲查詢、更改歌曲路徑以及退出點歌系統 一.後臺登錄界面 01.判斷
  • continue和break可以改變迴圈的執行流程,但在多重迴圈中,這兩條語句無法直接從內層迴圈跳轉到外層迴圈。在C語言中,可以通過goto語句實現多重迴圈的跳轉,但在非迴圈結構中使用goto語句會使程式的結構紊亂,可讀性變差。因此Java就發明瞭一種帶標簽的continue和break語句,實際上...
  • 數據類型內置函數用法int 關於內置方法是非常的多這裡呢做了一下總結 (1)__abs__(...)返回x的絕對值 #返回x的絕對值!!!都是雙下劃線 x.__abs__() <==> abs(x) 例如: #!/usr/bin/python print "abs(-45) : ", abs(-45
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...