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
- 3.Django分頁Django
- 13.Django-分頁Django
- django--DRF分頁Django
- Django REST framework 分頁DjangoRESTFramework
- django-reids模組Django
- 07 Django的Form模組DjangoORM
- Django框架之auth模組Django框架
- Django 前端BootCSS 實現分頁Django前端bootCSS
- wsgi模組在Django中配置Django
- Django REST framework API 指南(17):分頁DjangoRESTFrameworkAPI
- Django(68)drf分頁器的使用Django
- Django python 基於Layui的分頁DjangoPythonUI
- 十七 Django-使用者模組Django
- django 網站實現簡單分頁Django網站
- Django學習筆記(12)——分頁功能Django筆記
- 06 ## 模組分類
- Django建立app應用和admin模組DjangoAPP
- wsgiref模組、web框架、django框架簡介Web框架Django
- Django重要元件之Auth模組介紹Django元件
- django哪個模組配置資料庫Django資料庫
- Django(49)drf解析模組原始碼分析Django原始碼
- Django(51)drf渲染模組原始碼分析Django原始碼
- [Django REST framework - 自動生成介面文件、分頁]DjangoRESTFramework
- Django基礎八之認證模組---authDjango
- Django之模組的繼承和匯入Django繼承
- Django(48)drf請求模組原始碼分析Django原始碼
- 【Django必備01】——什麼是Django框架?有什麼優勢?模組組成介紹。Django框架
- 什麼是模組?Python模組分為哪幾類?Python
- django中admin模組中修改密碼的formDjango密碼ORM
- Django之使用者認證模組詳解Django
- Android模組化與元件化–多模組區分編譯Android元件化編譯
- 【分模組練習】二分查詢
- Django筆記十七之group by 分組用法總結Django筆記
- [Django高階之批量插入資料、分頁器元件]Django元件
- 比Django官方實現更好的分頁元件+Bootstrap整合Django元件boot
- Python語言模組分為哪幾類?有哪些主要模組?Python
- HanLP分類模組的分詞器介紹HanLP分詞