django之分頁演算法實現(Paginator)

2022-06-27 07:30:23 字數 4248 閱讀 4954

匯入模組:from django.core.paginator import paginator

一、paginator的基本用法:

from django.core.paginator import

paginator

objects = ['

john

','paul

','george

','ringo

','lucy

','meiry

','checy

','wind

','flow

','rain

']p = paginator(objects,3) #

3條資料為一頁,例項化分頁物件

print p.count #

10 物件總共10個元素

print p.num_pages #

4 物件可分4頁

print p.page_range #

xrange(1, 5) 物件頁的可迭代範圍

page1 = p.page(1) #

取物件的第一分頁物件

print page1.object_list #

第一分頁物件的元素列表['john', 'paul', 'george']

print page1.number #

第一分頁物件的當前頁值 1

page2 = p.page(2) #

取物件的第二分頁物件

print page2.object_list #

第二分頁物件的元素列表 ['ringo', 'lucy', 'meiry']

print page2.number #

第二分頁物件的當前頁碼值 2

print page1.has_previous() #

第一分頁物件是否有前一頁 false

print page1.has_other_pages() #

第一分頁物件是否有其它頁 true

print page2.has_previous() #

第二分頁物件是否有前一頁 true

print page2.has_next() #

print page2.next_page_number() #

print page2.previous_page_number() #

print page2.start_index() #

第二分頁物件的元素開始索引 4

print page2.end_index() #

第2分頁物件的元素結束索引 6

二、分頁功能實現例項:

模型:model.py

# 新聞 資料庫模型

class news(models.model):

# 標題

title = models.charfield(max_length=100, null=false)

# 發布日期

pub_time = models.datetimefield(auto_now_add=true)

class meta:

# 在去模型資料的時候,按照 pub_time 字段降序排序

ordering = ['-pub_time']

檢視函式:view.py

from django.core.paginator importpaginator
from datetime import datetime

# 需要匯入模型:news

# 時區轉換

from django.utils.timezone import make_aware

class

news_list_view(view):

def

get(self, request):

try:

#request.get.get('category',預設值):這個預設值只有在沒有category這個屬性的時候才會使用

#如果傳入的是乙個 "" 空字串,也不會使用預設值

#所以需要 or 0 保證不為空

#建立 paginator物件

#引數1:乙個可遍歷的object物件

#引數2:指定多少條資料為一頁

paginator = paginator(news_all, 10)

#獲取分頁物件

#引數page:int(第幾頁資料)

page_obj =paginator.page(page)

#分頁演算法邏輯方法

getdata =self.get_pagination_data(page_obj, paginator)

content =

#更新字典

content.update(getdata)

return render(request, '

cms/news_list.html

', context=content)

def get_pagination_data(self, page_boj, paginator, page_news_count=2):

"""分頁優化

:param page_boj:當前頁面物件

:param paginator: paginator 分頁物件

:param page_news_count: 左右兩邊顯示多少頁面(前端頁數) 「[1] [...] [5] [6] [7] [8] [9] [...] [99]」

:return:

"""#

獲取當前頁碼

page_num =page_boj.number

#得到當前可以分為多少頁,獲取總頁數

count =paginator.num_pages

#判斷分頁是否顯示 「 ... 」

left_has_more =false

right_has_more =true

#返回左右顯示的頁碼區間 range(start,end+1) 如: 1 ... 5 6 7 8 9 ... 99

#left_page_count

#right_page_count

# 如果當前頁碼 >= 最大頁碼 -1 - page_news_count,那麼就不顯示 ...

if page_num >= count - page_news_count - 1:

right_has_more =false

right_page_count = range(page_num + 1, count + 1)

else

: right_page_count = range(page_num + 1, page_num + 1 +page_news_count)

# if page_num >= 2 +page_news_count:

left_has_more =true

left_page_count = range(page_num -page_news_count, page_num)

else

: left_page_count = range(1, page_num)

return

<

body

>

標題發布時間操作}

}編輯刪除總頁數:} / }

1...}}

}...

}

body

>

效果:

all i had was dreams and unfounded self-confidence.but everything starts here.

最初所擁有的只是夢想,以及毫無根據的自信而已。但是,所有的一切就從這裡出發。

Django元件之 分頁器

django自帶分頁器 paginator 用起來非常方便。怕自己寫的出bug,可以使用現成的 批量匯入資料 booklist for i in range 100 book.objects.bulk create booklist 分頁器的使用 book list book.objects.all...

django之分頁器元件

1,配置路由,在模板層建立表模型 2,在檢視層圍標新增資料 def index request 先造成100本書,放到列表中 ll for i in range 100 批量插入,兩個引數,第乙個是物件列表,第二個是一次插入的資料量,不填,預設一次全插入 models.book.objects.bu...

django 實現分頁功能

分頁效果 檢視 1 coding utf 8 2 from django.shortcuts import render,get object or 404 3 from django.core.paginator import paginator,pagenotaninteger,emptypag...