分页

  • Django的提供了一些类实现管理数据分页,这些类位于Django的/核心/ paginator.py中

分页程序对象

  • 分页程序(列表,INT):返回分页对象,参数为列表数据,每面数据的条数

属性

  • 数:对象总数
  • NUM_PAGES:页面总数
  • page_range:页码列表,从1开始,例如[1,2,3,4]

方法

  • 页(NUM):下标以1开始,如果提供的页码不存在,抛出InvalidPage异常

异常异常

  • InvalidPage:当向页()传入一个无效的页码时抛出
  • PageNotAnInteger:当向页()传入一个不是整数的值时抛出
  • EmptyPage:当向页()提供一个有效值,但是那个页面上没有任何对象时抛出

页面对象

创建对象

  • 分页程序对象的页面()方法返回页面对象,不需要手动构造

属性

  • object_list中:当前页上所有对象的列表
  • 编号:当前页的序号,从1开始
  • 分页程序:当前页面对象相关的分页程序对象

方法

  • has_next():如果有下一页返回真
  • has_previous():如果有上一页返回真
  • has_other_pages():如果有上一页或下一页返回真
  • 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(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>

results matching ""

    No results matching ""