匯入模組: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
# 新聞 資料庫模型檢視函式:view.pyclass 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']
from django.core.paginator importpaginator
from datetime import datetime# 需要匯入模型:news
# 時區轉換
from django.utils.timezone import make_aware
classnews_list_view(view):
defget(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效果:>
![](https://pic.w3help.cc/c1e/be979217a472b417df1c070da577c.jpeg)
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...