Django实战(20):分页(Pagination)
在上一節(jié)我們實現(xiàn)了針對某個產(chǎn)品的訂單訂閱功能。但是我們可能需要直接在站點上查詢所有的訂單。顯然,隨著時間的增長訂單會越來越多,所以分頁(Pagination)是個好辦法:每次只顯示一部分訂單。
分頁是Web應用常用的手法,Django提供了一個分頁器類Paginator(django.core.paginator.Paginator),可以很容易的實現(xiàn)分頁的功能。該類有兩個構造參數(shù),一個是數(shù)據(jù)的集合,另一個是每頁放多少條數(shù)據(jù)。Paginator的基本使用如下:
$python manage.py shell
>>> from django.core.paginator import Paginator
>>> objects = ['john', 'paul', 'george', 'ringo']
>>> p = Paginator(objects, 2)????? #每頁兩條數(shù)據(jù)的一個分頁器
>>> p.count??????? #數(shù)據(jù)總數(shù)
4
>>> p.num_pages????? #總頁數(shù)
2
>>>p.page_range?????? #頁碼的列表
[1, 2]
>>> page1 = p.page(1)???? #第1頁
>>> page1
<Page 1 of 2>
>>> page1.object_list???? #第1頁的數(shù)據(jù)
['john', 'paul']
>>> page2 = p.page(2)
>>> page2.object_list????? #第2頁的數(shù)據(jù)
['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()?? # 本頁第一條記錄的序數(shù)(從1開始)
3
>>> page2.end_index()??? # 本頁最后錄一條記錄的序數(shù)(從1開始)
4
>>> p.page(0)?????????????? #錯誤的頁,拋出異常
...EmptyPage: That page number is less than 1
>>> p.page(3)????????????? #錯誤的頁,拋出異常
...EmptyPage: That page contains no results
?
其實前面scaffold生成的內容里面就已經(jīng)包含了分頁的功能,相信有了對Paginator的了解,你自己就可以看懂在view函數(shù)和模板中如何使用分頁器了。
總結
以上是生活随笔為你收集整理的Django实战(20):分页(Pagination)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据列表DataList模板之实例
- 下一篇: django-pagination---