django-web開發框架-分頁

分頁

  • 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}}&nbsp;&nbsp;
{%else%}
<a href="/pag{{pindex}}/">{{pindex}}</a>&nbsp;&nbsp;
{%endif%}
{%endfor%}
</body>
</html>

views:

 

應用urls:

 

模板:

 

效果測試:

必須輸入頁碼,無頁碼匹配失敗

當前頁取消跳轉

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章