django的分頁功能類將我們常用的多種方法均封裝在
Paginator
類,根據這些方法我們均可深度定製我們的分頁功能。
首先來看看[Paginator
] 類的構造方法:
class Paginator(object_list, per_page, orphans=0, allow_empty_first_page=True)
必選參數:
objects_list
: 必須是列表/元組或Django
所生成的QuerySet
對象,或具有count()
或__len __()
方法的其他可切片對象。per_page
: 每頁顯示多少個數量,是一個整數
可選參數:
orphans
: 默認值爲零,無論最後一頁剩餘多少條數據,都另起一頁,否則將剩餘的合併到上一頁,舉例:假如當前分頁一共11
頁,第11
頁的只有兩條數據,那麼我們定義orphans=2
,則分頁總數剩餘10
頁,最後兩條數據合併到第10
頁。allow_empty_first_page
: 是否允許第一頁爲空。 如果爲False
同時object_list
爲空,則將引發EmptyPage
錯誤,默認值爲True
.
Paginator的方法,2.0版後新增:
Paginator.get_page(number)
方法:返回當前頁頁碼,並具有處理超出頁碼範圍和無效頁碼的狀況,頁碼不是數字返回第一頁,超出返回最後一頁。Paginator.page(number)
方法: 返回指定頁碼的內容,如果給定的頁碼不存在,則引發InvalidPage。
屬性:
Paginator.count
: 所有頁面中的對象總數。Paginator.num_pages
: 分頁總數Paginator.page_range
: 迭代頁碼,返回的是一個[1,2,3,4,...]這樣的列表。
瞭解了上邊這些之後我們既可以在模板中直接使用Page對象所提供的方法,直接使用!
Page objects對象中的方法及屬性:
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()
返回當前頁的最後一條數據
屬性
Page.object_list
此頁上的對象列表。Page.number
此頁的基於 1 的頁碼。Page.paginator
關聯的 Paginator 對象。
案例詳解:
# views.py from django.core.paginator import Paginator def list(request): LIST = [] for i in range(1,102): LIST.append(i) paginator = Paginator(LIST, 10, orphans=2, ) pages = paginator.page_range # 生成所有頁碼 pages_num = paginator.num_pages # 總也數 gd_page = paginator.page(5) # 調用指定頁面的內容 page = request.GET.get('page') # 當前頁面 contacts = paginator.get_page(page) # 當前頁並具有處理超出頁碼範圍的狀況,頁碼不是數字返回第一頁,超出返回最後一頁 return render(request, 'notes/list.html',{'contacts':contacts, 'pages':pages, 'pagenums':pages_num, 'gd_page':gd_page})
# list.html {% for contact in contacts %} <li>{{ contact|upper }}</li> {% endfor %} <h1>分頁練習</h1> {% if contacts.has_previous %} <li>上一頁頁碼:{{ contacts.previous_page_number }}</li> <a href="?page={{ contacts.previous_page_number }}">上一頁</a> {% endif %} <li>當前頁碼:{{ contacts.number }}</li> {% if contacts.has_next %} <li>下一頁頁碼:{{ contacts.next_page_number }}</li> <a href="?page={{ contacts.next_page_number }}">下一頁</a> {% endif %} {{ contacts.start_index }} {{ contacts.end_index }} <p> 所有頁碼:</p> <div class="pagetions"> {% for page in pages %} {% if page == contacts.number %} <a class="active" href="?page={{ page }}">{{ page }}</a> {% else %} <a href="?page={{ page }}">{{ page }}</a> {% endif %} {% endfor %} </div> 總頁數:{{ pagenums }} {% for gd in gd_page %} <li>{{ gd }}</li> {% endfor %} 給定頁碼:{{ gd_page }}
創作不易,我會持續分享關於Django的相關知識,有興趣的朋友可以關注本人微信公衆號:幸福關中, 如果您覺得不錯的話,打賞以下小編,小編會更有動力分享更多關於Django方面的知識,歡迎大家加小編微信交流Django知識,備註Django,小編微信:xingfuguanzhong。