django高级(四)分页

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>

猜你喜欢

转载自blog.csdn.net/Albert_Ejiestein/article/details/89075302