django Paginator分頁+Boostrap樣式快速生成分頁按鈕
django自帶分頁功能,方便我們快速呼叫,更多介紹見官方文件
1.匯入
from django.core.paginator import Paginator
2.屬性和方法
p = Paginator(object_list, per_page, orphans=0, allow_empty_first_page=True)
#構造Paginator物件
#object_list:要分頁的物件,可以是列表,元組,或django中的QuerySet等
#per_page:每頁最多的文章數
#orphans:當最後一頁的文章數小於或等於該值時,這些文章將被自動合併到前一頁
#allow_empty_first_page:是否允許第一頁為空
#屬性
p.count #文章總數
p.num_pages #總分頁數
p.page_range #頁碼範圍,返回一個列表,從1開始,如[1,2,3,4]
#方法
page = p.page(number) #返回指定頁碼的page物件,若不存在則丟擲錯誤
#page物件的屬性和方法
Page.object_list #包含當前頁的所有物件列表
Page.number #當前頁的頁碼,從1開始
Page.has_next() #是否有下一頁,若有返回True
Page.has_previous() #是否有上一頁,若有返回True
Page.has_other_pages() #是否有下一頁或上一頁,若有返回True
Page.next_page_number() #返回下一頁的頁碼
Page.previous_page_number() #返回上一頁的頁碼
Page.start_index() #返回當前頁的第一個物件在所有物件列表中的序號
Page.end_index() #返回當前頁的最後一個物件在所有物件列表中的序號
3.例子
views.py
def news(request,type):
articles = Article.objects.all().filter(category__name = type).order_by('-time') #匯入的Article模型
p = Paginator(articles,10) #分頁,10篇文章一頁
if p.num_pages <= 1: #如果文章不足一頁
article_list = articles #直接返回所有文章
data = '' #不需要分頁按鈕
else:
page = int(request.GET.get('page',1)) #獲取請求的文章頁碼,預設為第一頁
article_list = p.page(page) #返回指定頁碼的頁面
left = [] # 當前頁左邊連續的頁碼號,初始值為空
right = [] # 當前頁右邊連續的頁碼號,初始值為空
left_has_more = False # 標示第 1 頁頁碼後是否需要顯示省略號
right_has_more = False # 標示最後一頁頁碼前是否需要顯示省略號
first = False # 標示是否需要顯示第 1 頁的頁碼號。
# 因為如果當前頁左邊的連續頁碼號中已經含有第 1 頁的頁碼號,此時就無需再顯示第 1 頁的頁碼號,
# 其它情況下第一頁的頁碼是始終需要顯示的。
# 初始值為 False
last = False # 標示是否需要顯示最後一頁的頁碼號。
total_pages = p.num_pages
page_range = p.page_range
if page == 1: #如果請求第1頁
right = page_range[page:page+2] #獲取右邊連續號碼頁
if right[-1] < total_pages - 1: # 如果最右邊的頁碼號比最後一頁的頁碼號減去 1 還要小,
# 說明最右邊的頁碼號和最後一頁的頁碼號之間還有其它頁碼,因此需要顯示省略號,通過 right_has_more 來指示。
right_has_more = True
if right[-1] < total_pages: # 如果最右邊的頁碼號比最後一頁的頁碼號小,說明當前頁右邊的連續頁碼號中不包含最後一頁的頁碼
# 所以需要顯示最後一頁的頁碼號,通過 last 來指示
last = True
elif page == total_pages: #如果請求最後一頁
left = page_range[(page-3) if (page-3) > 0 else 0:page-1] #獲取左邊連續號碼頁
if left[0] > 2:
left_has_more = True #如果最左邊的號碼比2還要大,說明其與第一頁之間還有其他頁碼,因此需要顯示省略號,通過 left_has_more 來指示
if left[0] > 1: #如果最左邊的頁碼比1要大,則要顯示第一頁,否則第一頁已經被包含在其中
first = True
else: #如果請求的頁碼既不是第一頁也不是最後一頁
left = page_range[(page-3) if (page-3) > 0 else 0:page-1] #獲取左邊連續號碼頁
right = page_range[page:page+2] #獲取右邊連續號碼頁
if left[0] > 2:
left_has_more = True
if left[0] > 1:
first = True
if right[-1] < total_pages - 1:
right_has_more = True
if right[-1] < total_pages:
last = True
data = { #將資料包含在data字典中
'left':left,
'right':right,
'left_has_more':left_has_more,
'right_has_more':right_has_more,
'first':first,
'last':last,
'total_pages':total_pages,
'page':page
}
return render(request,'news.html',context={
'article_list':article_list,'data':data
})
html
{% if data %}
<ul id="pages" class="pagination pagination-sm pagination-xs">
{% if data.first %}
<li><a href="?page=1">1</a></li>
{% endif %}{% if data.left %}{% if data.left_has_more %}
<li><span>...</span></li>
{% endif %}{% for i in data.left %}
<li><a href="?page={{i}}">{{i}}</a></li>
{% endfor %}{% endif %}
<li class="active"><a href="?page={{data.page}}">{{data.page}}</a></li>
{% if data.right %}{% for i in data.right %}
<li><a href="?page={{i}}">{{i}}</a></li>
{% endfor %}{% if data.right_has_more %}
<li><span>...</span></li>
{% endif %}{% endif %}{% if data.last %}
<li><a href="?page={{data.total_pages}}">{{data.total_pages}}</a></li>
{% endif %}
</ul>
{% endif %}
相關推薦
django Paginator分頁+Boostrap樣式快速生成分頁按鈕
django自帶分頁功能,方便我們快速呼叫,更多介紹見官方文件 1.匯入 from django.core.paginator import Paginator 2.屬性和方法 p = Paginator(object_list, per_pag
Django Paginator 分頁
django 分頁 Paginator 1,視圖配置viewsfrom django.core.paginator import Paginator def HostInfo(request,page_id=1): host_info = models.HostInfo.object
django Paginator分頁外掛
1 from django.shortcuts import render 2 import importlib 3 from king_admin.utils import table_filter 4 from django.core.paginator import Pag
django 的分頁器Paginator ,從django中導入類
shee 生成 得到 cfi htm ces name bootstrap imp 先創建表,然後生成批量數據。 在models文件裏 from django.db import models # Create your models here. class Boo
Django 使用Paginator分頁
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger subclass_s = models.subclass_details.objects.all() #查詢資料獲取一個列表
django 簡單分頁
object common res ceil 上一頁 form ren xpage render 初學django分頁, 變量名寫的太隨意見諒. 1 view.py 2 3 def Index(request,page): 4 page = common
day18-2-django之分頁和session
特征 request 客戶 .site none func pytho 控制 render Django-4 知識預覽 分頁器(paginator) COOKIE 與 SESSION 回到頂部 分頁器(paginator) 分頁器的使用 >>
django實現分頁(pure-pagination)
django 分頁 pure-pagination 安裝:pip install django-pure-pagination具體步驟搜索GitHub裏面詳情。class OrgView(View): """ 課程機構列表功能 """ def get(se
python之路--web--2--Django-9-分頁
自定義分頁 取數據 計算 分享 頁碼 col 用戶輸入 div 輸入 六、分頁 一、Django內置分頁 views.py Html 擴展內置分頁:views.py 擴展內置分頁:Html 二、自定義分頁 分頁功能在每個網站都是必要的,對於分頁來說,其實就是根據用戶的輸入計
bootstrap-paginator分頁示例 源碼 MVC
jquer inittab 加載 rbo 創建 etime tps name item 準備 1.數據:bootstrap包(含分頁插件bootstrap-paginator.js) 2.技術方案:ajax動態加載分頁、部分視圖、BLL取數 代碼 模板頁 @{
使用Django實現分頁器功能
django index imp ace active 開始 cts 獲取 import 要使用Django實現分頁器,必須從Django中導入Paginator模塊 from django.core.paginator import Paginator 假如現在有15
Django之分頁
Django 分頁一、Django的分頁器(paginator)1、批量導入數據book_list = [] for i in range(100): book_obj = Book(title="Book_%s" % i, price=i * i) book_list.
Django之分頁升級版
多少 lse django 顯示 max deepcopy property str ini 如果查詢出的數據,被分頁了,這個時候翻頁的時候應該講頁數的參數和查詢的參數一塊在URL上顯示 """ 分頁器 """ from django.utils.safestrin
Django的分頁
current reat eat style sha django sheet isa request 1.插入批量數據 book_list = [] for i in range(1,101): book = Book(title="bo
Django的分頁功能
1、設計模型準備資料 class Student(models.Model): s_name = models.CharField(max_length=50) s_age = models.ImageField(default=16) 2、展示資料 # 在資料
django實現分頁功能
在個人部落格或者網站上,我們發表文章經常會對部落格進行分頁,下面程式碼用django實現: django有它自帶的分頁功能:Paginator 不過我們用在它基礎上開發的另一個包:django-pure-pagination 先了解一下這個包特性: 1、使用與django.core相同的A
013---Django的分頁器
知識預覽 分頁 中介軟體 回到頂部 分頁 Django的分頁器(paginator) view 1 def index(request): 2 # 建立資料
django之分頁查詢
.html lac html ive path com lse font port 1.自定義分頁函數 #第一個參數:request對象;第二個參數:需要分頁的數據;第三個參數:每頁顯示的數據個數;第四個參數:需要返回的網頁---->"myadmin/user/ind
Django的分頁器
一個分頁器的模板 import copy class Pagination(object): def __init__(self, current_page_num, all_count, request, per_page_num, page_count=11):
python3 django動態分頁引發的list切片下標越界問題
顯示 動態 作者 方式 頁碼 django 比較 獲取數據 解決 起先是扒了一個包,動態分頁的,但這個包分頁之前要加載全部的數據,我這東西後臺是個爬蟲,不一定瀏覽的完所以這麽做有點浪費資源,於是我改造了一下。 # :param obj_count: 獲得 條目總數# :pa