django外掛-dj-pagination簡單設定實現分頁(甚至不用在view上寫paginate)
阿新 • • 發佈:2019-02-10
1. 概述
django真的有好多簡單方便好用的輪子!!!
這次介紹的這個是用於分頁的,django中本身提供了實現分頁的物件,但是每次都要寫一堆業務程式碼,也是神煩。
在django-awesome專案中發現了這個輪子:
文件也很簡單,三四頁的樣子。
下面一起來探索一下吧!
2. 快速實現
A. 將以下配置加入settings檔案中.
1. 加入app
INSTALLED_APPS += (
'dj_pagination' ,
)
2. 加入中介軟體
Django 版本低於1.10 使用 MIDDLEWARE_CLASSES
MIDDLEWARE += (
'dj_pagination.middleware.PaginationMiddleware' ,
)
3. 新增模板上下文處理器
TEMPLATE_CONTEXT_PROCESSORS 預設情況下是隱式設定,這裡宣告出來以瞭解用了哪些處理器
TEMPLATE_CONTEXT_PROCESSORS =(
"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"
)
B. html模板檔案
這裡假設傳入模板的查詢集列表是object_list
1. 在html的最上面宣告使用pagination_tags 模板標籤
{% load pagination_tags %}
2. 自動分頁處理器
語法為autopaginate QUERYSET [PAGINATE_BY] [ORPHANS] [as NAME]
其中PAGINATE_BY
是分頁時每頁的物件個數,預設為20
{% autopaginate object_list 10 as object_list_page %}
3. 使用分頁物件
這裡的顯示效果自己寫html+css即可
{% for object in object_list_page%}
<div>object.title</div>
<div>object.name</div>
{% endfor %}
4. 生成頁碼
{% paginate %}
以上幾步完成之後分頁就完成了,沒有複雜的邏輯!你只需要提供一個object_list
列表即可!
3. 其他功能
3.1 自定義分頁模板
pagination/blog/post.html
是你的模板位置
預設使用pagination/pagination.html
{% autopaginate posts pagesize %}
{% paginate using "pagination/blog/post.html" %}
3.2 同個模板中多次使用分頁
你可以多次使用autopaginate/paginate
,需要注意的是你必須在使用paginate
前使用autopaginate
.
3.3 其他設定
PAGINATION_INVALID_PAGE_RAISES_404
對應頁碼無效的頁碼是丟擲404錯誤(True)還是不顯示物件(False 預設).
PAGINATION_DISPLAY_PAGE_LINKS
如果設定為False,分頁結果為單頁則不將顯示頁碼。預設為True, 單頁也顯示頁碼。
PAGINATION_PREVIOUS_LINK_DECORATOR
'上一頁'連結的HTML內容字首,預設為`‹‹`也就是 `<<`
PAGINATION_NEXT_LINK_DECORATOR
'下一頁'連結的HTML內容字首,預設為`››`也就是 `>>`
PAGINATION_DISPLAY_DISABLED_PREVIOUS_LINK
如果設定為False,如果沒有上一頁則顯示上一頁連結。預設為False。
PAGINATION_DISPLAY_DISABLED_NEXT_LINK
如果設定為False,如果沒有下一頁則顯示下一頁連結。預設為False。
PAGINATION_DISABLE_LINK_FOR_FIRST_PAGE
如果設定為False,第一頁將`?page=1`顯示分頁的連結字尾,否則(True)將被忽略。預設為True。
機器翻譯(以後優化…)
關於上傳的說明
當把dj-pagination和檔案上傳一起使用時,要注意什麼時候request.page被訪問是很重要的。一旦 request.page被訪問,request.upload_handlers被凍結,不能以任何方式改變。page在檢視中儘可能晚地訪問請求物件上的屬性是一個好主意。
可選設定
在dj-pagination中,沒有必要的設定。但是,有一小部分可選設定可用於更改分頁標籤的預設行為。這裡有一個概述:
PAGINATION_DEFAULT_PAGINATION
如果未指定編號,則顯示在頁面上的預設專案數量。預設為20
PAGINATION_DEFAULT_WINDOW
顯示當前頁面左側和右側的專案數(佔橢圓)。預設為4。
PAGINATION_DEFAULT_MARGIN
FIXME:這需要記錄。
PAGINATION_DEFAULT_ORPHANS
允許的ORPHANS數。根據Django文件,ORPHANS被定義為:
在最小數目的專案允許上的最後一個頁面,預設到零。
更多文章可以訪問我的個人部落格:碼練