2 | news = News.objects.order_by( '-id' ) |
3 | paginator = Paginator(news, 10 ) |
4 | page = request.POST.get( 'pageNum' , 1 ) |
6 | news = paginator.page(page) |
7 | except (EmptyPage, InvalidPage): |
8 | news = paginator.page(paginator.num_pages) |
9 | return render_to_response( 'news/index.html' ,{ 'news' :news, 'currentPage' :page}) |
05 | from django.shortcuts import render_to_response |
06 | from winlog.log_dj.models import Winlog |
07 | from django.core.paginator import Paginator,InvalidPage,EmptyPage,PageNotAnInteg |
14 | page = int (request.GET.get( 'page' , '1' )) |
20 | winlog_list = Winlog.objects. all ().order_by( '-id' ) |
21 | paginator = Paginator(winlog_list, 10 ) |
24 | winloglist = paginator.page(page) |
25 | except (EmptyPage,InvalidPage,PageNotAnInteger): |
26 | winloglist = paginator.page( 1 ) |
27 | if page > = after_range_num: |
28 | page_range = paginator.page_range[page - after_range_num:page + before_range |
31 | page_range = paginator.page_range[ 0 : int (page) + before_range_num] |
33 | return render_to_response( 'log_dj/index.html' , locals ()) |
35 | { % for winlog in winloglist.object_list % } |
36 | {{ winlog.date }}|{{ winlog.time }} <br / > |
39 | { % if winloglist.has_previous % } |
40 | <a href = "?page={{ winloglist.previous_page_number }}" title = "下一页" >上一页< / a>& |
43 | { % for p in page_range % } |
44 | { % ifequal p winloglist.number % } |
47 | <a href = "?page={{p}}" title = "第{{p}}页" >{{p}}< / a> |
51 | { % if winloglist.has_next % } |
52 | <a href = "?page={{ winloglist.next_page_number }}" title = "下一页" >下一页< / a>  |
55 | <! - - 第 {{ userList.number }} 页 共 {{ userList.paginator.num_pages }} 页 - - > |
Paginator对象
类Paginator:
class Paginator(object_list,per_page,orphans=0,allow_empty_first_page=True)
必须提供的参数:
object_list:一个列表或元组,元素是django QuerySet或是包含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对象
class Page(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对象。