Django: 分頁功能

成果:


將之前爬取的信息羅列出來箩退,做出分頁的樣式

代碼:
在之后的步驟中在相信說明吧

步驟:

1.這個mongoengine需要pip安裝的pip install mongoengine命令即可實現(xiàn)
建立與數(shù)據(jù)庫的鏈接辱志,connect的第一個參數(shù)是數(shù)據(jù)庫的名稱

先是在setting中加入數(shù)據(jù)

2.在第一步之后,在models中

from django.db import models
from mongoengine import *
# from mongoengine import connect
# connect('ceshi', host='127.0.0.1', port=27017)
# Create your models here.


class ItemInfo(Document):
    # StringField()的意思就是字符串
    title = StringField()
    # ListField的意思就是列表化一下
    area = ListField(StringField())
    pub_date = StringField()
    look = StringField()
    url = StringField()
    cates = ListField(StringField())
    time = StringField()
    price = StringField()

meta = {
    'collection': 'item_info',
}
# 親測可用
# for i in ItemInfo.objects[:1]:
#     print(i.title)

我個人的理解是初始化數(shù)據(jù)庫,這個是數(shù)據(jù)庫事先存在的情況下舟铜,與數(shù)據(jù)庫建立連接辜伟。而且在class中,每一項右側(cè)都要跟數(shù)據(jù)庫的key一致(必須一樣坚冀,如果不一致就報錯了)
可以看到济赎,在前后注釋掉的東西可以用來驗證是否成功
3.在view.py中
需要導(dǎo)入這個類
from ganji.models import ItemInfo

def index(request):
    limit = 4
    # 取出20個元素
    item_info = ItemInfo.objects[:1]
    # 下面的語句跟上面語句等價,但是為什么索引在這里
    # 仿佛失效的樣子
    # item_info = ItemInfo.objects.all()

    # 分頁器记某,前面是總共的元素司训,limit是每頁的元素個數(shù)
    paginator = Paginator(item_info, limit)
    print('頁碼數(shù)量', paginator.num_pages)

    # 從頁面獲取頁數(shù)信息,這里是獲日尬场豁遭?后參數(shù)page的value,
    # 可以看到get后的‘page’并不是我們定義的,而是我們獲取的
    # 它的值就是個int
    page = request.GET.get('page', 1)

    # 顯示某‘page’頁面的信息
    loaded = paginator.page(page)

    # print('這里是loaded', loaded)
    print('page_range', paginator.page_range)
    context = {
        'item_info': loaded,
    }

    # context是關(guān)鍵字贺拣,傳入字典蓖谢,但是這個字典的key才是在HTML中用到的
    # 這點跟flask不一樣,flask是隨便定義user=user,左邊是模板中的譬涡,右邊是views中的
    return render(request, 'index.html', context)

4.同時在HTML文件中
寫入信息闪幽,用循環(huán)既可,這點跟jinja2很相似涡匀,但是需要注意的是:
我們用的是context的key盯腌,并不是context本身

{% for item in item_info %}
    <section class="post">
        <header class="post-header">
            <h2 class="post-title">{{ item.title }}</h2>
            <p class="post-meta">
                {% for cate in item.cates %}
                <a class="post-category post-category-design" href="#">{{ cate }}</a>
                {% endfor %}
                 <br>
                 <br>
                {% for a in item.area %}
                <a class="post-category post-category-pure" href="#">{{ a }}</a>
                {% endfor %}
            </p>
        </header>
        <div class="post-description">
            <p>
                ¥{{ item.price }}---{{ item.pub_date }}
            </p>
        </div>
    </section>
{% endfor %}

5.分頁器
在views視圖函數(shù)中導(dǎo)入本次的重點--分頁器(詳細(xì)資料點擊查看)
from django.core.paginator import Paginator
需要在HTML中特意做出來這個分頁器。
其原理是:顯示頁碼陨瘩,當(dāng)點擊上一頁下一頁的時候腕够,會自動給視圖函數(shù)傳參數(shù),然后根據(jù)這個參數(shù)舌劳,返回數(shù)據(jù)給HTML渲染

<div class="footer">
    <div class="pure-menu pure-menu-horizontal">
        <ul>
           <li class="pure-menu-item"><a href="?page=1" class="pure-menu-link">首頁</a></li>
           {% if item_info.has_previous %}
               <li class="pure-menu-item"><a href="?page={{ item_info.previous_page_number }}" class="pure-menu-link">< pre</a></li>
           {% endif %}
               <li class="pure-menu-item"><span> {{ item_info.number }} of {{ item_info.paginator.num_pages }}</span></li>
           {% if item_info.has_next %}
               <li class="pure-menu-item"><a href="?page={{ item_info.next_page_number }}" class="pure-menu-link">next ></a></li>
           {% endif %}
           <li class="pure-menu-item"><a href="?page={{ item_info.paginator.num_pages }}" class="pure-menu-link">尾頁</a></li>
        </ul>
    </div>
</div>

其中用到了很多函數(shù)帚湘,可以查看分頁器的詳細(xì)介紹

新技能GET:

1.分頁器--http://python.usyiyi.cn/django/topics/pagination.html
2.流程是:
setting中注冊數(shù)據(jù)庫->models中引入數(shù)據(jù)庫->views中使用數(shù)據(jù)庫->最終用數(shù)據(jù)庫渲染

遇到的坑:

1.在models中引入數(shù)據(jù)庫的時候
class ItemInfo(Document):
其中的對象是以大寫字母D開頭的Document
2.在views.py中,item_info = ItemInfo.objects[:1]是復(fù)數(shù)的objects甚淡,復(fù)數(shù)大诸!

疑問未決:

如圖,第十行的代碼中索引好像完全不起作用贯卦,無論改為多少资柔,都能在第15行初始化中加載所有的object!而在11行print(item_info)中還是1撵割,到16行就已經(jīng)是所有數(shù)據(jù)都加載進去了;哐摺!


就是這個問題
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末啡彬,一起剝皮案震驚了整個濱河市官边,隨后出現(xiàn)的幾起案子沸手,更是在濱河造成了極大的恐慌,老刑警劉巖注簿,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件契吉,死亡現(xiàn)場離奇詭異,居然都是意外死亡诡渴,警方通過查閱死者的電腦和手機捐晶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來妄辩,“玉大人惑灵,你說我怎么就攤上這事⊙垡” “怎么了英支?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長哮伟。 經(jīng)常有香客問我干花,道長,這世上最難降的妖魔是什么楞黄? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任池凄,我火速辦了婚禮,結(jié)果婚禮上鬼廓,老公的妹妹穿的比我還像新娘肿仑。我一直安慰自己,他們只是感情好碎税,可當(dāng)我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布尤慰。 她就那樣靜靜地躺著,像睡著了一般雷蹂。 火紅的嫁衣襯著肌膚如雪割择。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天萎河,我揣著相機與錄音,去河邊找鬼蕉饼。 笑死虐杯,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的昧港。 我是一名探鬼主播擎椰,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼创肥!你這毒婦竟也來了达舒?” 一聲冷哼從身側(cè)響起值朋,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎巩搏,沒想到半個月后昨登,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡贯底,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年丰辣,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片禽捆。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡笙什,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出胚想,到底是詐尸還是另有隱情琐凭,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布浊服,位于F島的核電站统屈,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏臼闻。R本人自食惡果不足惜鸿吆,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望述呐。 院中可真熱鬧惩淳,春花似錦、人聲如沸乓搬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽进肯。三九已至激蹲,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間江掩,已是汗流浹背学辱。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留环形,地道東北人策泣。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像抬吟,于是被迫代替她去往敵國和親萨咕。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內(nèi)容