django Paginator分頁模組
Django提供了一些類來幫助你管理分頁的資料 -- 也就是說,資料被分在不同頁面中,並帶有“上一頁/下一頁”標籤。這些類位於django/core/paginator.py中。
示例¶
向Paginator提供物件的列表,以及你想為每一頁分配的元素數量,它就會為你提供訪問每一頁上物件的方法:
>>> from django.core.paginator import Paginator
>>> objects = ['john', 'paul', 'george', 'ringo']
>>> p = Paginator(objects, 2)
>>> p.count
4
>>> p.num_pages
2
>>> p.page_range
[1, 2]
>>> page1 = p.page(1)
>>> page1
<Page 1 of 2>
>>> page1.object_list
['john', 'paul']
>>> page2 = p.page(2)
>>> page2.object_list
['george', 'ringo']
>>> page2.has_next()
False
>>> page2.has_previous()
True
>>> page2.has_other_pages()
True
>>> page2.next_page_number()
Traceback (most recent call last):
...
EmptyPage: That page contains no results
>>> page2.previous_page_number()
1
>>> page2.start_index() # The 1-based index of the first item on this page
3
>>> page2.end_index() # The 1-based index of the last item on this page
4
>>> p.page(0)
Traceback (most recent call last):
...
EmptyPage: That page number is less than 1
>>> p.page(3)
Traceback (most recent call last):
...
EmptyPage: That page contains no results
注意
注意你可以向Paginator提供一個列表或元組,Django的QuerySet,或者任何帶有count()或__len__()方法的物件。當計算傳入的物件所含物件的數量時,Paginator會首先嚐試呼叫count(),接著如果傳入的物件沒有count()方法則回退呼叫 len()。這樣會使類似於Django的QuerySet的物件使用更加高效的 count()方法,如果存在的話。
使用 Paginator
這裡有一些複雜一點的例子,它們在檢視中使用 Paginator 來為查詢集分頁。我們提供檢視以及相關的模板來展示如何展示這些結果。這個例子假設你擁有一個已經匯入的Contacts模型。
檢視函式看起來像是這樣:
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
def listing(request):
contact_list = Contacts.objects.all()
paginator = Paginator(contact_list, 25) # Show 25 contacts per page
page = request.GET.get('page')
try:
contacts = paginator.page(page)
except PageNotAnInteger:
# If page is not an integer, deliver first page.
contacts = paginator.page(1)
except EmptyPage:
# If page is out of range (e.g. 9999), deliver last page of results.
contacts = paginator.page(paginator.num_pages)
return render_to_response('list.html', {"contacts": contacts})
在list.html模板中,你會想要包含頁面之間的導航,以及來自物件本身的任何有趣的資訊:
<div class="pagination">
<span class="step-links">
<span class="current">
Page of .
</span>
</span>
</div>
屬性¶
- Paginator.count¶
-
所有頁面的物件總數。
注意
當計算object_list所含物件的數量時, Paginator會首先嚐試呼叫object_list.count()。如果object_list沒有 count() 方法,Paginator 接著會回退使用len(object_list)。這樣會使類似於Django’s QuerySet的物件使用更加便捷的count()方法,如果存在的話。
- Paginator.num_pages¶
-
頁面總數。
- Paginator.page_range¶
-
頁碼的範圍,從1開始,例如[1, 2, 3, 4]。
方法¶
- Page.next_page_number()[source]¶
-
返回下一頁的頁碼。如果下一頁不存在,丟擲InvalidPage異常。
- Page.previous_page_number()[source]¶
-
返回上一頁的頁碼。如果上一頁不存在,丟擲InvalidPage異常。
- Page.start_index()[source]¶
-
返回當前頁上的第一個物件,相對於分頁列表的所有物件的序號,從1開始。比如,將五個物件的列表分為每頁兩個物件,第二頁的start_index()會返回3。
- Page.end_index()[source]¶
-
返回當前頁上的最後一個物件,相對於分頁列表的所有物件的序號,從1開始。 比如,將五個物件的列表分為每頁兩個物件,第二頁的end_index() 會返回 4。
相關文章
- django分頁Django
- django實現分頁的模組(匯入即可用)Django
- Django的分頁Django
- 13.Django-分頁Django
- Django REST framework 分頁DjangoRESTFramework
- django--DRF分頁Django
- 3.Django分頁Django
- django 自定義分頁與bootstrap分頁結合Djangoboot
- Django 前端BootCSS 實現分頁Django前端bootCSS
- django 分頁器 中介軟體Django
- Django REST framework API 指南(17):分頁DjangoRESTFrameworkAPI
- Django(68)drf分頁器的使用Django
- django 網站實現簡單分頁Django網站
- Django學習筆記(12)——分頁功能Django筆記
- Django python 基於Layui的分頁DjangoPythonUI
- [Django REST framework - 自動生成介面文件、分頁]DjangoRESTFramework
- 比Django官方實現更好的分頁元件+Bootstrap整合Django元件boot
- [Django高階之批量插入資料、分頁器元件]Django元件
- 07 Django的Form模組DjangoORM
- Django框架之auth模組Django框架
- django-reids模組Django
- Django之分頁功能Django
- wsgi模組在Django中配置Django
- 十七 Django-使用者模組Django
- django url的分發Django
- mysql分頁-limit offset分頁MySqlMIT
- Django框架之分頁器使用Django框架
- Python:Django的ListView超詳細用法(含分頁paginate功能)PythonDjangoView
- django-rest-framework 基礎四 過濾、排序、分頁、異常處理DjangoRESTFramework排序
- Python+django網頁設計入門(16):優化設計複用分頁程式碼PythonDjango網頁優化
- wsgiref模組、web框架、django框架簡介Web框架Django
- Django重要元件之Auth模組介紹Django元件
- Django(49)drf解析模組原始碼分析Django原始碼
- Django(51)drf渲染模組原始碼分析Django原始碼
- django哪個模組配置資料庫Django資料庫
- django學習記錄--第一個網頁“hello django”Django網頁
- 利用Bootstrap Paginator外掛和knockout.jsbootJS
- django美化論壇頁面二Django