django 提供了乙個用於分頁的paginator 物件,下面簡單介紹下paginator 物件
paginator 物件的匯入:
from django.core.paginator import paginator
paginator 物件用法:
paginator(object_list, per_page, orphans=0, allow_empty_first_page=true)
object_list:
改引數必須是列表,元祖,queryset 物件 或者物件有count() 或者__len__()的方法:
per_page:
每頁顯示的數量
orphans:
這個引數用於當最後一頁顯示的數量小於或者等於 orphans 的數值時,最後一頁顯示的資料會被放到前一頁顯示.
allow_empty_first_page:
是否允許為object_list 為空
paginator方法:
paginator.get_page(number)
django 2.0 以上的版本,此方法返回乙個page物件,如果number不是乙個數字,返回第一頁,如過number大於總頁數了,返回最後一頁
paginator.page(number)
返回page物件,如果給的numbe引數不存在,將丟擲異常invalidpage
paginator屬性:
paginator.count
資料object_list總條數,
計算時首先會呼叫傳入的object_list 的count方法如果object_list 沒有count() 方法 會呼叫len(object_list) 方法
paginator.num_pages
返回總頁數
paginator.page_range
返回頁數的range物件
page 物件的用法
通常不需要自己建立page 物件,通過paginator.get_page 或者 paginator.page()去建立
方法:
1)page.has_next()
返回true
2)page.has_previous()
3) page.next_page_number()
屬性:
1) page.object_list
返回此頁的物件列表
2) page.number
返回此頁的頁碼,
3) page.paginator
返回關聯的paginatior 物件
下面使用paginator 物件在類檢視中實現乙個通用的分頁方法
# django version 2.0
from django.core.paginator import paginator
from django.views import view
class newsquery(view)
def get(request)
p = request.get['page'] 獲取當前的頁碼
articles = article.object.all()
article_paginator = paginator(articles, 10) # 每頁顯示的數量10條
page_obj = paginator.page(p) # 獲取page 物件
page_data = self.get_pagination_data(article_paginator,page_obj) # 呼叫實現的通用分頁方法
context={}
context.updata(page_data) # 將分頁的資料更新到context中,用於前端渲染
pass
def get_pagination_data(self, paginator, page_obj, around_count=2)
"""通用分頁演算法, 前端頁數只顯示5頁,超過5頁的省略顯示。
:param paginator: 分頁
:param page_obj: 當前頁
:param around_count: 當前頁碼兩邊的頁數
:return:
"""current_page_number = page_obj.number # 返回page物件當前頁的頁碼
all_counts = paginator.num_pages # 返回總頁數
left_has_more = fasle # 前端顯示不超過5頁需判斷當前頁的左邊或者右邊有更多的頁碼,如果有更多省略顯示
right_has_more = false
left_pages = range(1,current_page_number) # 左邊右邊的起止頁,
right_pages = range(current_page_number,all_counts+1)
if current_page_number-around_count>around_count:
left_has_more = ture
left_pages = range((current_page_number - around_count),current_page_number)
if all_counts-current_page_number > around_count
right_has_more = true
right_pages = range(current_page_number,(current_page_number + around_count + 1))
page_data =
return page_data
mysql實現分頁 MySQL如何實現分頁查詢
mysql中實現分頁查詢 在資料量較小的情況下可使用limit查詢來實現分頁查詢,在資料量大的情況下使用建立主鍵或唯一索引來實現,另外可通過order by對其排序 一般情況下在mysql中進行分頁查詢時,會用到limit查詢,而且在查詢中都會使用到order by來進行排序。接下來將具體介紹mys...
hql2(通用分頁)
basedao sql和hql通用分頁 的區別 通過書籍名字模糊查詢資料,並且具備分頁的功能 hql通用分頁 方法分享 public class basedao object value null 給query賦值 for map.entryentry map.entryset 陣列型別 else ...
2000及2005通用分頁
2000及2005通用分頁。1 3次排序分頁。select from select top 10 from select top 20 from sourcetable order by id asc as temptable order by id desc as rettable order b...