分頁
- 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}}/">{{pindex}}</a>
{%endif%}
{%endfor%}
</body>
</html>
views:
應用urls:
模板:
效果測試:
必須輸入頁碼,無頁碼匹配失敗
當前頁取消跳轉