在上一節我們實現了針對某個產品的訂單訂閱功能。但是我們可能需要直接在站點上查詢所有的訂單。顯然,隨着時間的增長訂單會越來越多,所以分頁(Pagination)是個好辦法:每次只顯示一部分訂單。
分頁是Web應用常用的手法,Django提供了一個分頁器類Paginator(django.core.paginator.Paginator),可以很容易的實現分頁的功能。該類有兩個構造參數,一個是數據的集合,另一個是每頁放多少條數據。Paginator的基本使用如下:
$python manage.py 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 #頁碼的列表
[1, 2]
>>> page1 = p.page(1) #第1頁
>>> page1
<Page 1 of 2>
>>> page1.object_list #第1頁的數據
['john', 'paul']
>>> page2 = p.page(2)
>>> page2.object_list #第2頁的數據
['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() # 本頁第一條記錄的序數(從1開始)
3
>>> page2.end_index() # 本頁最后錄一條記錄的序數(從1開始)
4
>>> p.page(0) #錯誤的頁,拋出異常
...EmptyPage: That page number is less than 1
>>> p.page(3) #錯誤的頁,拋出異常
...EmptyPage: That page contains no results
其實前面scaffold生成的內容里面就已經包含了分頁的功能,相信有了對Paginator的了解,你自己就可以看懂在view函數和模板中如何使用分頁器了。