django实现分页的方法
本文实例讲述了django实现分页的方法。分享给大家供大家参考。具体如下:
Python代码如下:
#!/usr/bin/envpython
#-*-coding:utf-8-*-
#Createyourviewshere.
fromdjango.shortcutsimportrender_to_response
fromwinlog.log_dj.modelsimportWinlog
fromdjango.core.paginatorimportPaginator,InvalidPage,EmptyPage,PageNotAnInteger
defindex(request):
after_range_num=5
before_range_num=4
try:
page=int(request.GET.get('page','1'))
ifpage<1:
page=1
exceptValueError:
page=1
winlog_list=Winlog.objects.all().order_by('-id')
paginator=Paginator(winlog_list,10)
try:
winloglist=paginator.page(page)
except(EmptyPage,InvalidPage,PageNotAnInteger):
winloglist=paginator.page(1)
ifpage>=after_range_num:
page_range=paginator.page_range[page-after_range_num:page+before_range_num]
else:
page_range=paginator.page_range[0:int(page)+before_range_num]
returnrender_to_response('log_dj/index.html',locals())
HTML页面如下:
{%forwinloginwinloglist.object_list%}
{{winlog.date}}|{{winlog.time}}<br/>
{%endfor%}
{%ifwinloglist.has_previous%}
<ahref="?page={{winloglist.previous_page_number}}"title="下一页">上一页</a>&
nbsp;
{%endif%}
{%forpinpage_range%}
{%ifequalpwinloglist.number%}
<span>{{p}}</span>
{%else%}
<ahref="?page={{p}}"title="第{{p}}页">{{p}}</a>
{%endifequal%}
{%endfor%}
{%ifwinloglist.has_next%}
<ahref="?page={{winloglist.next_page_number}}"title="下一页">下一页</a> 
;
{%endif%}
<!--第{{userList.number}}页共{{userList.paginator.num_pages}}页-->
Paginator对象:
类Paginator:
classPaginator(object_list,per_page,orphans=0,allow_empty_first_page=True)
必须提供的参数:
object_list:一个列表或元组,元素是djangoQuerySet或是包含count()或__len__()方法的可切片对象。
per_page:包含在一页中最多的条目数量。
可选参数:
orphans:在最后一页中充许的最少条目数量,默认是0.当最后一页条目数量小于或等于orphans时,这些条目加到本页的上一页中。
allow_empty_first_page:是否充许第一页为空。如设为False且object_list为空,则抛出EmptyPage异常。
方法:
Paginator.page(number):返回一个Page对象,序号是始于1.如给出的页号不存在,抛出InvalidPage异常。
属性:
Paginator.num_pages:页面总页数
Paginator.page_range:页面数的范围,始于1,如[1,2,3,4]。
InvalidPage异常:
如要求的页面无效或页面中没有对象,page()抛出InvalidPage异常。
PageNotAnInterger:当提供给page()的数不是整数是抛出该异常。
EmptyPage:当提供给page()的数是一个有效数,但在该页没有对象存在时,抛出该异常。
Page对象:
classPage(object_list,number,paginator):
一般不手工创建Pages,可以使用Paginator.page().
方法:
Page.has_next():如有下一页则返回True
Page.has_previous():如有上一页则返回True
Page.has_other_pages():如有上一页或下一页返回True
Page.next_page_number():返回下一页的页码。不管下一页是否存在都返回。
Page.previous_page_number():返回上一页的页码。不管上一页是否存在都返回。
Page.start_index():返回当前页面中第一个对象的序号,序号始于1.例如:将一个包含5个对象的列表分成每页2个对象,则第二页的start_index()返回3.
Page.end_index():返回当前页面中最一个对象的序号。
属性:
Page.object_list:当前页面中所有的对象
Page.number:当前页面的页码,始于1
Page.paginator:页面相关的Pageinator对象。
希望本文所述对大家的Python程序设计有所帮助。