分頁
- Django提供了一些類實作管理資料分頁,這些類位于django/core/paginator.py中
Paginator對象
- Paginator(清單,int):傳回分頁對象,參數為清單資料,每面資料的條數
屬性
- count:對象總數
- num_pages:頁面總數
- page_range:頁碼清單,從1開始,例如[1, 2, 3, 4]
方法
- page(num):下标以1開始,如果提供的頁碼不存在,抛出InvalidPage異常
異常exception
- InvalidPage:當向page()傳入一個無效的頁碼時抛出
- PageNotAnInteger:當向page()傳入一個不是整數的值時抛出
- EmptyPage:當向page()提供一個有效值,但是那個頁面上沒有任何對象時抛出
Page對象
建立對象
- Paginator對象的page()方法傳回Page對象,不需要手動構造
屬性
- object_list:目前頁上所有對象的清單
- number:目前頁的序号,從1開始
- paginator:目前page對象相關的Paginator對象
方法
- has_next():如果有下一頁傳回True
- has_previous():如果有上一頁傳回True
- has_other_pages():如果有上一頁或下一頁傳回True
- next_page_number():傳回下一頁的頁碼,如果下一頁不存在,抛出InvalidPage異常
- previous_page_number():傳回上一頁的頁碼,如果上一頁不存在,抛出InvalidPage異常
- len():傳回目前頁面對象的個數
- 疊代頁面對象:通路目前頁面中的每個對象
示例
建立視圖pagTest
from django.core.paginator import Paginator
def pagTest(request, pIndex):
list1 = AreaInfo.objects.filter(aParent__isnull=True)
p = Paginator(list1, 10)
if pIndex == '':
pIndex = '1'
pIndex = int(pIndex)
list2 = p.page(pIndex)
plist = p.page_range
return render(request, 'booktest/pagTest.html', {'list': list2, 'plist': plist, 'pIndex': pIndex})
配置url
url(r'^pag(?P<pIndex>[0-9]*)/$', views.pagTest, name='pagTest'),
定義模闆pagTest.html
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<ul>
{%for area in list%}
<li>{{area.id}}--{{area.atitle}}</li>
{%endfor%}
</ul>
{%for pindex in plist%}
{%if pIndex == pindex%}
{{pindex}}
{%else%}
<a href="/pag{{pindex}}/" target="_blank" rel="external nofollow" >{{pindex}}</a>
{%endif%}
{%endfor%}
</body>
</html>
views:

應用urls:
模闆:
效果測試:
必須輸入頁碼,無頁碼比對失敗
目前頁取消跳轉