—django內建分頁
內建分頁包含2個重要物件:paginator和page物件,分別封裝了分頁的一些物件屬性,實質上是2個類屬性的例項化
首先從django.core.paginator中引入模組
from django.core.paginator import paginator,emptypage,pagenotaninteger
//paginator接收2個引數,資料庫中的所有資料和你設定的每頁顯示的資料個數
def divid_page1(request):
paginator=paginator(data,10)
page=request.get.get('p')
//異常處理,假設使用者在url上輸入了不是數字的頁碼,返回第一頁,如果輸入的頁碼大於最大頁碼返回最後一頁
try:
contants=paginator.page(page)
except pagenotaninteger:
contants=paginator.page(1)
except emptypage:
contants=paginator.page(paginator.num_pages)
return render(request,'divid_page1.html',locals())
count 物件數量num_pages 總頁數
page_range 所有頁數範圍的生成器*
.page()方法,傳入當前頁碼,返回頁面
分頁**只需寫一次存放起來,每次使用時進行呼叫,防止**重複冗餘
—django內建分頁擴充套件
在內建分頁中拓展自己的功能,可以自己寫方法,然後進行繼承paginator,page類,來進行自定製。
在我們自己定義的類中需要的一些引數:
所有資料
當前頁每頁顯示個數 —>show_page
最多顯示個數
在views中定製新的類
class mypaginator(paginator):
def __init__(self,current_page,show_page,*args,**kwargs):
# 當前頁
self.current_page=int(current_page)
#預設頁數
self.show_page=int(show_page)
super(mypaginator, self).__init__(*args,**kwargs)
def page_number(self):
if self.num_pages <= self.show_page:
return range(1,self.num_pages+1)
//show_page可以決定每次出現的頁碼個數
part=self.show_page//2
if self.current_page <= part:
return range(1, self.show_page+1)
if self.current_page+part > self.num_pages:
return range(self.num_pages-self.show_page,self.num_pages+1)
else:
return range(self.current_page-part,self.current_page+part+1)
接著在html檔案中進行模板渲染,將頁碼獲取。
—自定義分頁
在自定義的分頁元件上,不能依託於django給我們的功能,要脫離django的框架,讓我們的元件在任何框架上都可以使用。
原理相似,我們用python的類來自定製我們自己的分頁,
我們的自定製分頁需要傳入一些引數,由於不能用django的內建解析,我們不能把資料一次性都讀取到記憶體中,所以我們只需要資料的總數量就好。
我們需要傳入的引數:
資料總條數
當前頁數
每頁展示資料個數
每頁顯示頁碼總數
要傳入網頁的引數
class mypaginator:
def __init__(self,totaldata,current_page,position_url,per_page_data=10,show_page=10):
#錄入的資料總數
self.totaldata=int(totaldata)
#當前頁碼
try:
self.current_page=int(current_page)
except:
self.current_page=1
#每頁展示的資料個數
self.per_page_data=per_page_data
#每頁展示的頁碼個數
self.show_page=show_page
#目標位址
self.url=position_url
#一下2個方法針對對資料進行切片時,獲得開始和結束的數值
def start(self):
return (self.current_page-1)*self.per_page_data
def end(self):
return self.current_page*self.per_page_data
@property
def num_pages(self):
if self.totaldata%self.per_page_data == 0:
return self.totaldata
else:
return self.totaldata+1
def num_range(self):
if self.num_pages <= self.show_page:
return range(1,self.num_pages+1)
part=self.show_page//2
if self.current_page <= part:
return range(1, self.show_page+1)
if self.current_page+part > self.num_pages:
return range(self.num_pages-self.show_page,self.num_pages+1)
else:
return range(self.current_page-part,self.current_page+part+1)
def bottom_page_num(self):
//此方法中加入了bootstrap中的樣式,呼叫時要在html頁面中引入
bottom_page_num=
if self.current_page == 1:
'.format(self.url,1)
else:
'.format(self.url,self.current_page-1)
for i in self.num_range():
if i == self.current_page:
element = '{}
'.format(self.url, i, i)
else:
element='{}
'.format(self.url,i,i)
if self.current_page == self.num_pages:
'.format(self.url,self.num_pages)
else:
'.format(self.url,self.current_page+1)
#返回字串否則會在網頁上出現['','','']的形式
return ''.join(bottom_page_num)
這樣我們在其他地方使用時只需要呼叫這個類就可以實現我們自定製的分頁顯示了 Django元件 分頁器
批量匯入資料 booklist for i in range 100 book.objects.bulk create booklist 分頁器的使用 book list book.objects.all paginator paginator book list,10 print count pa...
Django元件 分頁器
批量匯入資料 booklist for i in range 100 book.objects.bulk create booklist 分頁器的使用 book list book.objects.all paginator paginator book list,10 print count pa...
django分頁元件pagination
django提供了pagination這個非常方便的元件來讓我們進行分頁,使用方法 from django.core.paginator import paginator objects john paul george ringo p paginator objects,2 獲取分頁管理器 p.c...