分頁page Django 實現通用分頁

2021-10-16 02:51:17 字數 3009 閱讀 2340

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...