最近的項目中用到了分頁功能,用Django自帶的Paginator來實現簡單的分頁。
第一步,導入Paginator及相關異常模塊
from django.core.paginator import Paginator, PageNotAnInteger, EmptyPage
Paginator:分頁器對象
PageNotAnInteger:表示傳過來的頁碼不是Integer類型會引發該異常。
EmptyPage:表示頁碼不在有效范圍時(即頁碼過大或者過小,數據為空時)會引發該異常。
第二步,分頁功能編寫
其中:data是數據,list類型。start是頁數,int類型。limit每頁的個數,int類型
p = Paginator(data, limit)
p為分頁器對象,它的屬性包括:
count:返回對象列表(數據)的長度
num_pages:返回總頁數
page_range:返回頁碼列表
response = {} p = Paginator(data, limit) try: new_data = p.page(start) except PageNotAnInteger as e: print e # 頁碼不是整數返回第一頁 new_data = p.page(1) except EmptyPage as e: print e total_num = p.num_pages if start > total_num: # 大於總頁碼 返回最后一頁數據返回 new_data = p.page(total_num) else: new_data = p.page(1) print new_data, 'new_data' response['info'] = new_data.object_list
new_data為page的一個對象,它的常用屬性為:
- object_list:同樣是指對象列表,不過只包含當前頁的對象
- number:當前頁面的頁碼
- paginator :指對應的分頁器對象(Paginator )