paginator中提供了一些类来实现数据管理分页,这些类存在于django/core/paginator.py
paginator对象,对所有的数据进行分页,该对象有一个方法page(num),返回某一页,生成一个page对象。
Paginator对象
paginator(列表,int):返回分页对象,参数为列表数据,每面数据的条数
list=HeroInfo.objects.all()
paginator=Paginator(list,5)
属性
- count:对象总数
- num_pages:页面总数
- page_range:页码列表,从1开始
方法
- page(num):返回某一页,下标以1开始,如果提供的页码不存在,抛出InvalidPage异常
异常exception
- InvalidPage:当向page()传入一个无效的页码时抛出
- PageNotAnInteger:当向page()传入一个不是整数的值时抛出
- EmptyPage:当向page()提供一个有效值,但是那个页面上没有任何对象时抛出
Page对象
属性
- object_list:当前页上所有对象的列表
- number:当前页的序号
- paginator:当前page对象相关的paginator对象
方法
- has_next():
- has_previous():
- has_other_pages():
- next_page_number():
- previous_page_number():
- len():
视图
def herolist(request,pindex):
if pindex=='':
pindex='1'
list=HeroInfo.objects.all()
paginator=Paginator(list,5)
page=paginator.page(int(pindex))
context={'page':page}
return render(request,'booktest/herolist.html',context)
url配置
\d*表示0个或多个0到9的数字
url(r'^herolist/(\d*)$',views.herolist)
模板
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<ul>
{% for hero in page %}
<li>{{hero.hname}}</li>
{% endfor%}
</ul>
<hr>
{%for index in page.paginator.page_range%}
<a href="/herolist/{{index}}/">{{index}}</a>
{%endfor%}
</body>
</html>