成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Django搭建個(gè)人博客:文章分頁

stormgens / 701人閱讀

摘要:隨著時(shí)間的推移加上勤奮的寫作,你的博客文章一定會(huì)越來越多。如果不進(jìn)行處理,可能同一個(gè)頁面會(huì)擠上成百上千的文章,不美觀不說,還降低了頁面的反應(yīng)速度。這個(gè)時(shí)候就需要對(duì)文章進(jìn)行分頁的處理。有疑問請(qǐng)?jiān)诙刨惖膫€(gè)人網(wǎng)站留言,我會(huì)盡快回復(fù)。

隨著時(shí)間的推移(加上勤奮的寫作!),你的博客文章一定會(huì)越來越多。如果不進(jìn)行處理,可能同一個(gè)頁面會(huì)擠上成百上千的文章,不美觀不說,還降低了頁面的反應(yīng)速度。

這個(gè)時(shí)候就需要對(duì)文章進(jìn)行分頁的處理。

利用輪子

寫一個(gè)完善的分頁功能是有些難度的,好在Django已經(jīng)幫你準(zhǔn)備好一個(gè)現(xiàn)成的分頁模塊了(Django把大部分基礎(chǔ)功能都替你準(zhǔn)備好了?。?。內(nèi)置模塊雖然簡單,但是對(duì)博客來說完全足夠了。

我們要用到的是Paginator類。在Shell中可以充分嘗試它的用法:

>>> from django.core.paginator import Paginator
>>> objects = ["john", "paul", "george", "ringo"]
>>> p = Paginator(objects, 2)

>>> p.count
4
>>> p.num_pages
2
>>> p.page_range
range(1, 3)

>>> page1 = p.page(1)
>>> page1

>>> page1.object_list
["john", "paul"]

>>> page2 = p.page(2)
>>> page2.object_list
["george", "ringo"]
>>> page2.has_next()
False
>>> page2.has_previous()
True
>>> page2.has_other_pages()
True
>>> page2.previous_page_number()
1
這是一個(gè)官網(wǎng)的例子。詳見:Pagination

有了這個(gè)類,剩下的工作就是把它應(yīng)用到項(xiàng)目中去。

輕車熟路

要對(duì)文章列表分頁,因此就要修改article/views.pydef article_list()視圖:

article/views.py

...
# 引入分頁模塊
from django.core.paginator import Paginator

def article_list(request):
    # 修改變量名稱(articles -> article_list)
    article_list = ArticlePost.objects.all()

    # 每頁顯示 1 篇文章
    paginator = Paginator(article_list, 1)
    # 獲取 url 中的頁碼
    page = request.GET.get("page")
    # 將導(dǎo)航對(duì)象相應(yīng)的頁碼內(nèi)容返回給 articles
    articles = paginator.get_page(page)

    context = { "articles": articles }
    return render(request, "article/list.html", context)

...

在視圖中通過Paginator類,給傳遞給模板的內(nèi)容做了手腳:返回的不再是所有文章的集合,而是對(duì)應(yīng)頁碼的部分文章的對(duì)象,并且這個(gè)對(duì)象還包含了分頁的方法。

我們?cè)谇懊娴奈恼乱呀?jīng)接觸過一些將參數(shù)傳遞到視圖的手段了:

通過POST請(qǐng)求將表單數(shù)據(jù)傳遞到視圖

通過url將地址中的參數(shù)傳遞到視圖

這里用到了另一種方法:在GET請(qǐng)求中,在url的末尾附上?key=value的鍵值對(duì),視圖中就可以通過request.GET.get("key")來查詢value的值。

然后改寫模板,在最末尾的

前面,加入分頁的內(nèi)容:

templates/article/list.html

...




...

內(nèi)容也比較簡單,用到了前面的Shell中演示的部分方法,判斷當(dāng)前頁所處的位置。

這樣就行了!補(bǔ)充幾篇文章(筆者共6篇),方便測試。刷新頁面后是這樣的:

視圖中設(shè)置了每頁只有1篇文章,所以就真的只有1篇了。

當(dāng)然這只是為了測試,實(shí)際環(huán)境中肯定要遠(yuǎn)大于1篇的。

點(diǎn)擊第2頁的按鈕后是這樣的:

看到頂部地址欄中的變化了嗎?

思考一下page是如何從模板傳遞到視圖的。

總結(jié)

除模板外,我們只寫了4行代碼,就有了還不錯(cuò)的分頁導(dǎo)航,Django就是這么貼心。

除了對(duì)文章列表,你可以對(duì)任何你想分頁的地方運(yùn)用此模塊(比如以后要講到的評(píng)論),滿足用戶各類的需求。

讀者還可以稍加閱讀Bootstrap 4官方文檔,改寫一個(gè)符合自己品味的外觀。


有疑問請(qǐng)?jiān)诙刨惖膫€(gè)人網(wǎng)站留言,我會(huì)盡快回復(fù)。

或Email私信我:[email protected]

項(xiàng)目完整代碼:Django_blog_tutorial

轉(zhuǎn)載請(qǐng)并注明出處。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/42834.html

相關(guān)文章

  • Django搭建個(gè)人博客:根據(jù)瀏覽量對(duì)最熱文章排序

    摘要:有了瀏覽量之后,文章受歡迎的程度就有了評(píng)價(jià)標(biāo)準(zhǔn)。隨之而來的就有根據(jù)瀏覽量對(duì)文章進(jìn)行排序的需求,即顯示最熱文章。它也是可以傳遞多個(gè)參數(shù)的,如,參數(shù)間用隔開視圖根據(jù)參數(shù)的值,判斷取出的文章如何排序方法指定對(duì)象如何進(jìn)行排序。 有了瀏覽量之后,文章受歡迎的程度就有了評(píng)價(jià)標(biāo)準(zhǔn)。隨之而來的就有根據(jù)瀏覽量對(duì)文章進(jìn)行排序的需求,即顯示最熱文章。 現(xiàn)在你已經(jīng)很熟悉MTV模式,不需要我啰嗦也能完成任務(wù): ...

    kidsamong 評(píng)論0 收藏0
  • Django 學(xué)習(xí)小組:博客開發(fā)實(shí)戰(zhàn)第三周教程——文章列表分頁和代碼語法高亮

    摘要:本教程內(nèi)容已過時(shí),更新版教程請(qǐng)?jiān)L問博客開發(fā)入門教程。當(dāng)分頁較多時(shí),總是顯示當(dāng)前頁及其前幾頁和后幾頁的頁碼教程中使用的是兩頁,其他頁碼用省略號(hào)代替。 本教程內(nèi)容已過時(shí),更新版教程請(qǐng)?jiān)L問: django 博客開發(fā)入門教程。 摘要:前兩期教程我們實(shí)現(xiàn)了博客的 Model 部分,以及 Blog 的首頁視圖 IndexView,詳情頁面 DetailView,以及分類頁面 CategoryVi...

    Luosunce 評(píng)論0 收藏0
  • Django搭建個(gè)人博客:創(chuàng)建并配置APP功能模塊

    摘要:創(chuàng)建在中的一個(gè)代表一個(gè)功能模塊。就是項(xiàng)目的基石,因此開發(fā)博客的第一步就是創(chuàng)建新的,用來實(shí)現(xiàn)跟文章相關(guān)的功能模塊。注意之后,的必須配置,否則會(huì)報(bào)錯(cuò)。總結(jié)本章創(chuàng)建了博客文章功能的,學(xué)習(xí)了注冊(cè)并配置。 創(chuàng)建APP 在Django中的一個(gè)app代表一個(gè)功能模塊。開發(fā)者可以將不同功能的模塊放在不同的app中, 方便代碼的復(fù)用。app就是項(xiàng)目的基石,因此開發(fā)博客的第一步就是創(chuàng)建新的app,用來實(shí)現(xiàn)...

    沈儉 評(píng)論0 收藏0
  • Django搭建個(gè)人博客:編寫博客文章的Model模型

    摘要:在里寫一個(gè)數(shù)據(jù)庫驅(qū)動(dòng)的應(yīng)用的第一步是定義模型,也就是數(shù)據(jù)庫結(jié)構(gòu)設(shè)計(jì)和附加的其它元數(shù)據(jù)。模型元數(shù)據(jù)是任何不是字段的東西,例如排序選項(xiàng)數(shù)據(jù)庫表名單數(shù)和復(fù)數(shù)名稱和。 Django 框架主要關(guān)注的是模型(Model)、模板(Template)和視圖(Views),稱為MTV模式。 它們各自的職責(zé)如下: 層次 職責(zé) 模型(Model),即數(shù)據(jù)存取層 處理與數(shù)據(jù)相關(guān)的所有事務(wù): 如何存取...

    winterdawn 評(píng)論0 收藏0
  • Django搭建個(gè)人博客:結(jié)束和開始

    摘要:教程看到這里,你已經(jīng)學(xué)會(huì)如下內(nèi)容搭建開發(fā)環(huán)境博文管理用戶管理發(fā)表評(píng)論若干小功能搭建簡單的小博客,以上的功能夠用了。教程為了起步平緩,沒有展開這方面的內(nèi)容。陌生人,祝你學(xué)業(yè)進(jìn)步事業(yè)有成歡迎常到杜賽的個(gè)人網(wǎng)站做客 教程看到這里,你已經(jīng)學(xué)會(huì)如下內(nèi)容: 搭建開發(fā)環(huán)境 博文管理 用戶管理 發(fā)表評(píng)論 若干小功能 搭建簡單的小博客,以上的功能夠用了。 相信你的志向不止于此。畢竟程序員面試個(gè)個(gè)造火...

    zqhxuyuan 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<