Django實戰(20):分頁(Pagination)


在上一節我們實現了針對某個產品的訂單訂閱功能。但是我們可能需要直接在站點上查詢所有的訂單。顯然,隨着時間的增長訂單會越來越多,所以分頁(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函數和模板中如何使用分頁器了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM