天天看點

django-web開發架構-分頁分頁Paginator對象Page對象示例

分頁

  • 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}}/" target="_blank" rel="external nofollow" >{{pindex}}</a>&nbsp;&nbsp;
{%endif%}
{%endfor%}
</body>
</html>
           

views:

django-web開發架構-分頁分頁Paginator對象Page對象示例
django-web開發架構-分頁分頁Paginator對象Page對象示例

應用urls:

django-web開發架構-分頁分頁Paginator對象Page對象示例

模闆:

django-web開發架構-分頁分頁Paginator對象Page對象示例

效果測試:

必須輸入頁碼,無頁碼比對失敗

django-web開發架構-分頁分頁Paginator對象Page對象示例

目前頁取消跳轉

django-web開發架構-分頁分頁Paginator對象Page對象示例
django-web開發架構-分頁分頁Paginator對象Page對象示例