1. 程式人生 > >django-pagination---七步教你實現Django網站列表自動分頁

django-pagination---七步教你實現Django網站列表自動分頁

from:http://django-china.cn/topic/53/

網站,特別是論壇,就如本社群一樣,肯定會遇到某個頁面要顯示列表(比如本社群的首頁,要顯示主題列表),那肯定就會涉及到列表的分頁功能。

舉個例子,比如一個列表有100個item,那我們網站的頁面是不是將此100個item都顯示出來嗎?顯示不是哦,這樣做以後一來是頁面不好看(頁面太長啦),使用者體驗不好(使用者根本不需要看這麼多item);第二就是效能不好(一下子讀取這麼多item,網站肯定很吃力 啊)。

廢話就不說啦,今天將要介紹一下Django的分頁利器APP--- django-pagination,它可以非常方便的為你實現你的分頁目標!我將結合 本社群的實現方式來介紹。

本社群使用它來進行各種列表的分頁。

介紹:

django-pagination allows for easy Digg-style pagination without modifying your views.

django-pagination就像它的名字一樣,它是一個Django分頁器,它包含了一組翻頁功能相關的utils,包括用於實現翻頁的tag等。使用起來非常簡單。是目前使用最多的分頁APP。

如何使用:

總共有七步來實現:

  1. 安裝

    sudo python setup.py install

  2. 將該APP安裝至Django專案中。(請修改settings.py)

     INSTALLED_APPS
    = ( # ... 'pagination', )
  3. 在Django專案的middleware中安裝此APP:(請修改settings.py)

     MIDDLEWARE_CLASSES = (
           # ...
           'pagination.middleware.PaginationMiddleware',
       )
    

    這樣,django-pagination可以在頁面請求過程中做一些簡單的處理。

  4. 請確保你的請求上下文含有django.core.context_processors.request。 如果沒有的話,請將django.core.context_processors.request加入到 TEMPLATE_CONTEXT_PROCESSORS中,示例如下:(請修改settings.py)。

    ("django.core.context_processors.auth",
        "django.core.context_processors.debug",
        "django.core.context_processors.i18n",
        "django.core.context_processors.media",
        "django.core.context_processors.request")
    
  5. 在你要進行列表分頁的頁面(template)的頁面上方(最好是最上面)中 匯入 它的tag, 以便後續我們可以在模板中使用它的一些功能。

     {% load pagination_tags %}
    
  6. 在你的模板(template)頁面上,對你想要分頁的列表變數(object_list)進行分頁,在模板中寫如下程式碼:(這段短程式碼的位置要在 放在 你顯示 object_list 之前)

    {% autopaginate object_list %}
    

    上面對列表分頁後預設每頁有20個,如果你想自己自定義,可以這樣:

    {% autopaginate object_list 10 %}
    

    這樣對列表分頁後每頁顯示10個。

    分頁後,django-pagination會更改object_list 的值,將object_list 變成一個只有20個(預設情況下)的列表。你可以對object_list 進行遍歷,顯示出他們。

    經過此步後,大家就可以獲取得到只有一頁的列表啦。

  7. 經過上步,我們得到一頁列表啦,但是我們想要第二頁,第三頁……,最好是在每一頁的最底部有一個頁數導航欄可以供大家選擇。例如:

    方法很簡單。只要在頁面的最底下使用如下程式碼:

    {% paginate %}
    

    當然,頁數導航欄使用的UI模板是 pagination/templates/pagination/pagination.html ,我們需要按我們站點的UI美觀需要來更改它哦。

小結:

怎麼樣,使用django-pagination後,大家肯定會覺得:“哇,太好用啦”,什麼事都幫我們做啦。是不是非常方便呢? :)

關於效能:

還有一個問題沒有解決哦,因為肯定有朋友會問,如果一個列表有100000個item, 我們想要實現每頁40個,那麼,當將我們請求該列表時, django-pagination在分頁過程中,請求資料庫是取40個,還是取100000啊!

顯然,django-pagination是不可能取100000的啦。

django-pagination 巧妙的利用了Django延遲獲取資料的特性,因此,django-pagination每次取資料都是隻取每頁的資料的(也就是上例中的40個),所以是不會有效能 影響 的哦。

關於這個問題,作者的主頁有兩個視訊解釋:(英文視訊,E文可以的同學可以看看)

相關推薦

django-pagination---實現Django網站列表自動

from:http://django-china.cn/topic/53/ 網站,特別是論壇,就如本社群一樣,肯定會遇到某個頁面要顯示列表(比如本社群的首頁,要顯示主題列表),那肯定就會涉及到列表的分頁功能。 舉個例子,比如一個列表有100個item,那我們網站的頁

實現使用Nginx+uWSGI+Django方法部署Django程序

設置 wsgi alias admin 生效 server static 出現 mar 新建一個XML文件: djangochina_socket.xml,將它放在/data/www/org_management目錄下: Nginx采用8077端口與uWSGI通訊,請確保此

實現使用Nginx+uWSGI+Django方法部署Django程式(上)

Django的部署可以有很多方式,採用nginx+uwsgi的方式是其中比較常見的一種方式。 在這種方式中,我們的通常做法是,將nginx作為伺服器最前端,它將接收WEB的所有請求,統一管理請求。nginx把所有靜態請求自己來處理(這是NGINX的強項)。然後,NGINX將所有非靜態請求通過uwsg

實現阿里巴巴的Sophix熱修復(一)

1.0 整合準備 gradle遠端倉庫依賴, 開啟專案找到app的build.gradle檔案,新增如下配置: 新增maven倉庫地址: repositories { maven { url "http://maven.ali

實現安卓mvvm架構,雙向資料繫結

google 2015年9月推出了mvvm架構,實現了在xml上設定雙向資料繫結,類似js。 開發步驟: 1   首先要先在build.gradle內新增 dataBinding { enabled true }   2.  建立一個Model

實現安卓mvvm架構,雙向資料繫結(二)

上文講了普通介面的雙向資料繫結,本文講一下recyclerview的雙向資料繫結,整個工程只要寫一個adapter就夠了,不用像以前一個recyclerview寫一個adapter了,節省了至少80%的程式碼,什麼第三方庫都不需要了。強大的工具! 1.   建立一個通用

Android從零開始之一實現聯絡人功能(一)

在最近的專案中有這樣的一個需求,就是要實現類似聯絡人的列表,包含模糊查詢、按照A到Z拼音首字母分組排序、和收藏功能。參考了一下網上的例子,我覺得還是自己親自操刀來實現所有的功能。今天帶領大家先實現聯絡人右邊的側邊欄【A~Z】。先上一張圖: 可以看到,右邊是

實現Emoji表情鍵盤

一、 說明 說到聊天,就離不開文字、表情和圖片,表情和圖片增加了聊天的趣味性,讓原本無聊的文字瞬間用表情動了起來,今天給大家帶來的是表情鍵盤,教你一步一步實現,先來看下效果圖. 二、功能 1、如何控制表情鍵盤與輸入法的切換 2、如何解析表情

Win10系統下一實現MASK_RCNN訓練自己的資料集(使用labelme製作自己的資料集)及需要注意的大坑

一、Labelme的安裝 二、製作自己的資料集       2.1 首先使用labelme標註如下樣式圖片(我的圖片是jpg格式)            2.2每個檔案生成一個對應的.json檔案。如下              2.3執行上面參考部落格最後給

手把手實現一個微信自動回復機器人

xposed use 分配 oba root 閑置 oot roc 動力 RebateBot 返利機器人 項目地址 項目描述 關鍵詞: 返利 微信 阿裏媽媽 機器人 跨平臺 返利機器人,基於微信建立機器人通道與用戶通過聊天快速生成返利鏈接 利用閑置微信和極小的電腦性能開啟

手把手實現一個微信自動回覆機器人

RebateBot 返利機器人 專案地址 專案描述 關鍵詞: 返利 微信 阿里媽媽 機器人 跨平臺 返利機器人,基於微信建立機器人通道與使用者通過聊天快速生成返利連結 利用閒置微信和極小的電腦效能開啟24小時無人輪值返利機器人 購物只需要傳送連結給機器人,機器人能馬上給你回覆優惠價格及連結

手把手如何玩轉外掛:外掛(Pagehelper)

情景引入:小白:起床起床,,,快起床!!!我:怎麼怎麼了,小白你到底又怎麼了。。小白:我發現在Web系統中,分頁是一種很常見的功能,可是,我之前寫的方法都比較麻煩,移植性不是很高,有沒有什麼好辦法可以快速實現分頁的呢?我:確實是的,分頁功能幾乎在每個系統中都是存在的,它的實現

Django寫自己的blog系統 --一建立屬於的部落格-1

專案的文章導航: 一:連線 1:新建blog專案 2:配置 3:新建一個首頁 二: 1.準備環境,在win7 64位下進行開發 軟體 pycharm 這些能夠使你的開發更專注, 2,python3.6 pip django1.11.16 pymysql mysql5.6 3,開始

React + Django + nginx + uwsgi 生產環境部署(一從開發環境到線上環境)

剛剛在本地測試環境寫完專案,目前本地測試是一切順利,未發現異常,準備打包到生產環境伺服器上. 前端React + antd + React-Router + axios 後端Python3.6 + Django1.10.1 腳手架用的是create-rea

5分鐘學會Django系統錯誤監控

使用 推薦 gin 資料 tps 發現 ror python開發 包括 一、監控所有的request請求 如何實現系統監控,自動發送錯誤日誌的郵件呢? 只需配置配置settings文件即可。 1.設置發送郵件配置信息 郵件會發送到ADMINS設定的郵件列表中。 SERVE

Python | 5分鐘學會Django系統錯誤監控

話不多說,直入正題。 先上圖,看一下監控的效果。 如下是監控我們網站系統錯誤的郵件。包含了請求的url地址,以及詳細的異常資訊。 一、監控所有的request請求 如何實現系統監控,自動傳送錯誤日誌的郵件呢?只需配置配置settings檔案即可。 1.設定傳送郵件配置資訊 郵件會發送到ADMI

Python | 7招識別一個網站是否是Django後臺

目錄: 利用Debug模式異常頁面判斷 通過CSRF Token驗證 Django Admin 通過HTTP頭 拼湊細節 通過一些第三方模組的特點判斷 分析靜態檔案 最近事情有點多,一直沒有時間寫原創,而又一直想寫點什麼,今天早上正好空下來,我就來寫一篇Python的吧,

Python|7招識別一個網站是否是Django後臺

平時開發們用Django寫網站,你作為黑盒測試來說可能不需要關心以下的問題,但白盒呢?所以黑盒不想提升一下自己的能力嗎? 今天我們就來說下,如何測試一個網站的後端是由Django編寫的。 更多Python視訊、原始碼、資料加群960410445免費獲取 1. 利用Debug

理解和實現iOS中的鏈式程式設計和函數語言程式設計

談到鏈式程式設計和函數語言程式設計,那Masonry幾乎就是最經典的代表.如: make.top.equalTo(self.view).offset(60) 像這樣top.equalTo(s

Python黑科技,學會Django系統錯誤監控

來源 prism rgs 一個 mat ora nbsp *args 分享 來源:http://www.jianshu.com/p/42e4287ffeda 話不多說,直入正題。 先上圖,看一下監控的效果。 如下是監控我們網站系統錯誤的郵件。包含了請求的url地址,以及詳