官方文檔傳送門html
Django提供了一些類來幫助你管理分頁的數據 -- 也就是說,數據被分在不一樣頁面中,並帶有「上一頁/下一頁」標籤。這些類位於django/core/paginator.py
中。node
向Paginator
提供對象的列表,以及你想爲每一頁分配的元素數量,它就會爲你提供訪問每一頁上對象的方法:python
注意web
注意你能夠向Paginator
提供一個列表或元組,Django的QuerySet
,或者任何帶有count()
或__len__()
方法的對象。當計算傳入的對象所含對象的數量時,Paginator
會首先嚐試調用count()
,接着若是傳入的對象沒有count()
方法則回退調用 len()
。這樣會使相似於Django的QuerySet
的對象使用更加高效的 count()
方法,若是存在的話。django
Paginator
這裏有一些複雜一點的例子,它們在視圖中使用 Paginator
來爲查詢集分頁。咱們提供視圖以及相關的模板來展現如何展現這些結果。這個例子假設你擁有一個已經導入的Contacts
模型。api
視圖函數看起來像是這樣:less
在list.html
模板中,你會想要包含頁面之間的導航,以及來自對象自己的任何有趣的信息:ide
Paginator
類擁有如下構造器:函數
object_list
A list, tuple, Django QuerySet
, or other sliceable object with a count()
or __len__()
method.
能夠是一個列表, 元組, Django的結果集, 或者是任何一個能夠迭代的對象
per_page
The maximum number of items to include on a page, not including orphans (see the orphans
optional argument below).
orphans
The minimum number of items allowed on the last page, defaults to zero. Use this when you don’t want to have a last page with very few items. If the last page would normally have a number of items less than or equal to orphans
, then those items will be added to the previous page (which becomes the last page) instead of leaving the items on a page by themselves. For example, with 23 items, per_page=10
, and orphans=3
, there will be two pages; the first page with 10 items and the second (and last) page with 13 items.
在最後一頁上容許的最小條目數,默認爲零。當你不想要一個只有不多的項目的最後一頁時,就用這個。若是最後一頁一般有一些小於或等於「孤兒」的條目,那麼這些條目將被添加到前一頁(這是最後一頁),而不是本身將條目放在頁面上。例如,有23個條目,「perpage=10」和「孤兒=3」,將有兩頁;第一個頁面有10個條目,第二個(和最後一個)頁面有13個條目。
allow_empty_first_page
Whether or not the first page is allowed to be empty. If False
and object_list
is empty, then an EmptyPage
error will be raised.
第一個頁面是否被容許爲空。若是「False」和「objectlist」是空的,那麼就會出現一個「錯誤」的錯誤。
Paginator.page
(number)[source]¶
返回在提供的下標處的Page
對象,下標以1開始。若是提供的頁碼不存在,拋出InvalidPage
異常。
Paginator.count
¶
全部頁面的對象總數。注意當計算object_list
所含對象的數量時, Paginator
會首先嚐試調用object_list.count()
。若是object_list
沒有 count()
方法,Paginator
接着會回退使用len(object_list)
。這樣會使相似於Django’s QuerySet
的對象使用更加便捷的count()
方法,若是存在的話。
Paginator.num_pages
¶
頁面總數。
Paginator.page_range
¶
頁碼的範圍,從1開始,例如[1, 2, 3, 4]
。
Paginator.page()
放回在所請求的頁面無效(好比不是一個整數)時,或者不包含任何對象時拋出異常。一般,捕獲InvalidPage
異常就夠了,可是若是你想更加精細一些,能夠捕獲如下兩個異常之一:
這兩個異常都是InvalidPage
的子類,因此你能夠經過簡單的except InvalidPage
來處理它們。
你一般不須要手動構建 Page
對象 -- 你能夠從Paginator.page()
來得到它們。
class Page
(object_list, number, paginator)[source]¶
當調用len()
或者直接迭代一個頁面的時候,它的行爲相似於 Page.object_list
的序列。
Page.next_page_number
()[source]¶
返回下一頁的頁碼。若是下一頁不存在,拋出InvalidPage
異常。
Page.previous_page_number
()[source]¶
返回上一頁的頁碼。若是上一頁不存在,拋出InvalidPage
異常。
返回當前頁上的第一個對象,相對於分頁列表的全部對象的序號,從1開始。好比,將五個對象的列表分爲每頁兩個對象,第二頁的start_index()
會返回3
。
返回當前頁上的最後一個對象,相對於分頁列表的全部對象的序號,從1開始。 好比,將五個對象的列表分爲每頁兩個對象,第二頁的end_index()
會返回 4
。
Page.object_list
¶
當前頁上全部對象的列表。
Page.number
¶
當前頁的序號,從1開始。