1. 程式人生 > >django Paginator分頁+Boostrap樣式快速生成分頁按鈕

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

djangoPaginator ,從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