文:鄭元春
人生苦短啸如,我用Python!
分頁用處很大续担,基本隨便哪個網(wǎng)站都會有用到分頁量瓜,從產品列表到喲過戶評論,只要是一頁放不下并且數(shù)量很多的情況下就需要 用到分頁了柿赊。通過分頁可以很好的組織你的數(shù)據(jù)展示形式俩功。
這里先說一個不用任何插件或者是框架,直接能夠應用到所有服務器軟件的分頁方法碰声,并且使用的是Ajax的方式绑雄,能夠讓用戶在不用刷新頁面的情況下進行操作,還能添加一些很酷的動畫或者是數(shù)據(jù)展示奥邮,當然那不屬于分頁的事情万牺。好了,進入正題:
- Ajax 分頁
你需要編寫一個分頁的數(shù)據(jù)API洽腺,返回的是json或者是jsonp的數(shù)據(jù)格式脚粟,json是個數(shù)據(jù)交換標準和XML一樣,都是為了便攜的交換數(shù)據(jù)蘸朋『宋蓿可以寫成下面的url來獲取你的ajax data,目的是為了將頁面index傳回到服務器中藕坯。
dataUrl=baseurl/api/get/***?page=2
這里有個base url团南,是你服務器的基礎地址噪沙,后面的api/get/是為了從邏輯上更好的區(qū)分你的url功能,這里可以隨你的喜好和命名習慣來編寫吐根,一般的服務器軟件都有路由映射功能正歼,將你的url映射到后方的服務器處理函數(shù)上去。再后面的***就是不同的服務器支持的后綴了(比如jsp拷橘,asp等后綴名)局义。最后的?page=2則是將需要獲取的頁面數(shù)據(jù)返回的頁數(shù)。這是通過在url添加參數(shù)的形式傳遞參數(shù)值冗疮,如果你的數(shù)據(jù)中有敏感數(shù)據(jù)的話萄唇,還可以選擇post方式傳遞數(shù)據(jù)。
后臺的服務器通過路由的方式調用你的邏輯函數(shù)來處理數(shù)據(jù)术幔,下面的偽代碼將會告訴你怎么獲取數(shù)據(jù)另萤。
function getPageData(.....)
pageIndex=request.getParameter("page")
itemCount=DB.query(Object).count()
itemPerPage=10 /*每一頁的項目數(shù)*/
pageCount=itemCount/itemPerPage
itemStartIndex=(pageIndex-1)*itemPerPage
itemEndIndex=pageIndex*itemPerPage
queryData=DB.query(Object)[itemStartIndex:itemEndIndex]
data={
"status":"success",
"pagenum":pageCount,
"curpagenum":pageIndex,
"data":queryData,
}
retun json(data)
除了上面簡要的偽代碼之外,你必須還要做些邊界處理诅挑,看你的下標和上標是否超過了數(shù)據(jù)集范圍四敞。
在頁面上直接使用JQuery的ajax函數(shù)就可以了。
$.ajax({
type:"get",
dataType:"json",
url:url:上面提到的那個url揍障,后面的page可以看你點擊的是頁面中哪個按鈕,
success:function(data){
if(data['status'] === 'success'){
//給頁面動態(tài)添加信息
}
});
- Django的分頁
Django提供了一個分頁器類`Paginator(django.core.paginator.Paginator)目养,可以很容易的實現(xiàn)分頁的功能俩由。該類有兩個構造參數(shù)毒嫡,一個是數(shù)據(jù)的集合,另一個是每頁放多少條數(shù)據(jù)幻梯。Paginator的基本使用如下:
#現(xiàn)在我們有下面的數(shù)據(jù)需要分頁兜畸,一共有6個數(shù)據(jù),每頁需要顯示2個
objects=['Amy','John','Lily','Lucy','Micky','Nancy']
from django.core.paginator import Paginator
p=Paginator(objects,2)
#下面的屬性很有幫助
p.count #數(shù)據(jù)總數(shù) 6
p.num_pages #總頁數(shù) 3
p.page_range #頁碼列表 [1,2,3]
#獲取頁面
p1=p.page(1)
p1.object_list
['Amy','John']
p2=p.page(2)
p3=p.page(3)
#每一頁判斷是否有前頁或是后頁或是其它頁
p1.has_previous()
p1.has_next()
p1.has_other_pages()
#前一頁和后一頁的頁碼
p1.previous_page_number()
p1.next_page_number()
#每一頁開始的element序數(shù)碘梢,最后記錄的序數(shù)
p1.start_index()
p2.end_index()
這樣就不用處理邊界問題咬摇,同時在模板中也能夠很好的進行數(shù)據(jù)的輸出,所有的數(shù)據(jù)或是屬性提供的數(shù)據(jù)已經(jīng)足夠在頁面中做好分頁了煞躬。
總結:
分頁是剛需肛鹏,Django將給了我們更便利的使用方式,需要的代碼不超過5行就能做出分頁功能恩沛,當然使用Django的分頁你既可以做出Ajax的形式也能做成每次訪問的形式在扰。好了,簡單的分頁系統(tǒng)就講解到這里了雷客,快應用到你的項目中吧芒珠!