翻譯自官方文件
django 1.0 中分頁機制和先前已經大不相同。它提供了一些類協助你把資料分頁。 對應的檔案為 django/core/paginator.py
類paginator,帶兩個構造引數,乙個就是資料的集合,另乙個表示每頁放幾個資料。
>>>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
[1, 2]
>>>
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
.next_page_number()3
>>>
page2
.previous_page_number()1
>>>
page2
.start_index
()# the 1-based index of the first item on this page
3>>>
page2
.end_index
()# the 1-based index of the last item on this page
4>>> p.
page(0
)...
emptypage: that page number is less than 1
>>> p.
page(3
)...
emptypage: that page contains no results
note
paginator
的第乙個引數可以是list,tuple,queryset 或者任意物件————只要它 有 count()
或者 __len__()
函式。 django後台會先嘗試呼叫 count()``。如果
不可行,再定要
``len() 。
下面是乙個複雜點的分頁例子。也就是把查詢子集在檢視中分頁顯示。下面演示了如何結合檢視 view,模板template來顯示結果。前提是假設``contacts`` model 已經被匯入。
檢視view 函式:
fromdjango.core.paginator
import
paginator
,invalidpage
,emptypage
deflisting
(request
):contact_list
=contacts
.objects
.all
()paginator
=paginator
(contact_list,25
)# show 25 contacts per page
# make sure page request is an int. if not, deliver first page.
try:
page
=int
(request
.get
.get
('page'
,'1'
))except
valueerror
:page=1
# if page request (9999) is out of range, deliver last page of results.
try:
contacts
=paginator
.page
(page
)except
(emptypage
,invalidpage
):contacts
=paginator
.page
(paginator
.num_pages
)return
render_to_response
('list.html',)
在模板檔案 list.html 中,將顯示每個物件的一些資訊,以及導航標記。:
建構函式:}...
previous
page } of }.
next
paginator(object_list, per_page, orphans=0, allow_empty_first_page=true)
object_list
乙個list,tuple,django的queryset,或者擁有``count()``或``__len__()``方法的 可分解物件。
per_page
每一頁最大的物件個數。
orphans
最後一頁物件的最少數目,預設為0。 如果想避免最後一頁顯示太少。則可以使用這個值。 那麼最後一頁的資料,自動被前移一頁。比如總共23個資料。每頁顯示 10.
orphans=3
那麼,第一頁為10,第二頁為13.
allow_empty_first_page
表示首頁是否可以為空,如果是
false
而且``object_list`` 為空,那麼會觸發
emptypage
異常。paginator.page(number)
根據索引number,返回乙個』page』物件,如果不存在,引起 invalidpage異常
paginator.count
所有物件的總數, 嘗試通過``object_list.count()``和``object_list.__len__()`` 取得paginator.num_pages
總共的頁數paginator.page_range
頁的範圍,比如[1,2,3,
4] 。
當頁面不存在或者無效時,會引起``invalidpage``異常,一般這個異常就夠用,如果需要更 詳細資訊,還有``pagenotaninteger``,``emptypage``可用:
pagenotaninteger
page()
的引數非整數。
emptypage
page(x)
,第x頁沒資料。
上述兩個都是 invalidpage 的子類。 用乙個簡單的 except
invalidpage
就可以處理。
page(object_list, number, paginator):
一般不需使用者自己構造,通過`paginator.page` 生成。
page.has_next()
page.has_previous()
如果前一頁存在返回page.has_other_pages()true
page.next_page_number()
page.previous_page_number()
page.start_index()
返回當前頁,第乙個物件的索引。page.end_index()
道理同上。
page.object_list
當前頁物件列表page.number
當前頁的索引page.paginator
和page相關的分頁類
Django中的分頁
直接看 吧,還算比較簡單 先確認資料量有多少 根據頁面顯示資料的多少來分割資料,得到頁面的開始資料和結束資料 根據開始和截止資料去切片資料,並且得到總共的頁碼數 根據一頁顯示多少頁碼和當前頁碼數,得到開始和截止的頁碼 內容為字串拼湊的html標籤,並拼接到一起 匯入mark safe模組,將字串轉化...
Django中的分頁
直接看 吧,還算比較簡單 先確認資料量有多少 根據頁面顯示資料的多少來分割資料,得到頁面的開始資料和結束資料 根據開始和截止資料去切片資料,並且得到總共的頁碼數 根據一頁顯示多少頁碼和當前頁碼數,得到開始和截止的頁碼 內容為字串拼湊的html標籤,並拼接到一起 匯入mark safe模組,將字串轉化...
Django中的分頁
django中分頁需要匯入分頁的工具,存在於django.core中,所以導包需要輸入 from django.core paginator import paginatorpaginator分別有三條屬性 count 記錄資料的總條數 num pages 記錄總頁數 page range 頁碼範圍...