Django 自带分页Paginator

Django 提供了一些类来帮助你管理分页的数据 -- 也就是说,数据被分在不同页面中,并带
有“上一页/下一页”标签。这些类位于 django/core/paginator.py  (paginator 模块)

导入模块:

from django.core.paginator import Paginator

Paginator 类拥有以下构造器

class Paginator (object_list, per_page, orphans=0, allow_empty_first_page=True):

必须参数:

object_list: 总对象的集合,所有的数据对象,如有100条数据,就有100个对象 
 如: contact_list = Contacts.objects.all()
 支持:一个列表或元组,Django的 QuerySet,或者任何带有count()或__len__()方法的对象

per_page : 每页显示的最大条数

可选参数:
orphans最后一页对象的最少数目,默认为0。

如果想避免最后一页显示太少。则可以使用这个值。 那么最后一页的数据,自动被前移一页。

如:总共23个数据。每页显示 10. orphans=3 那么,第一页为10,第二页为13.

allow_empty_first_page是否允许第一页为空 

 如果是 False 而且``object_list`` 为空,那么会触发 EmptyPage 异常

调用方法:

Paginator.page(number) 

第几页,根据索引number,返回一个’Page’对象,如果不存在,引起 InvalidPage异常

>>> page1=p.page(1)
>>> page1
<Page 1 of 2>

count:

总对象的个数,类型为int :如有100条数据,count就为100

Paginator.num_pages 

总页数

>>> p.num_pages
2

Paginator.page_range

页码的范围,从1开始,例如 [1, 2, 3, 4] 

>>> p.page_range
range(1, 3)             #python 3.x

Page 类 

Page(object_list, number, paginator):

一般不需用户自己构造,通过 Paginator.page(number) 获得。

p=Paginator(object_list,pre_page)
p.page(1) #Page 类的实例
type(p.page(1))   #>>django.core.paginator.Page ,paginator 模块下的Page类

Page.has_next()如果下一页存在,返回True。

如:p.page(1).has_next()

Page.has_previous() :如果前一页存在返回 True

Page.has_other_pages() :如果上一页面或者下一页存在,返回``True``

Page.next_page_number() :返回下一页的页码,这个函数比较傻(不管下一页是否存在,都是简单的+1),不存在,抛出 InvalidPage 异常。

Page.previous_page_number():返回上一页的索引 ,抛出 InvalidPage 异常。

Page 类 属性

Page.object_list   

当前页对象列表 , 如:第1页显示5条数据,Page.object_list   可获取这5个数据对象的列表

和Paginator.object_list   类 之间的区别

前者获取当前页面的所有对象,后者或者所有页面的所有对象。

Page.number 

当前页的页码,当前页的序号,从1开始 可理解为 www.a.com/1   中的1,第一页

Page.paginator

相关的 Paginator 对象

Django Paginator 官方实例 附注释

>>> from django.core.paginator import Paginator     #导入Paginator 类
>>> objects = ['john', 'paul', 'george', 'ringo']   #定义数据
>>> p = Paginator(objects, 2)                       #创建 Paginator 对象,传人数据,设置每页pre_page=2
>>> p.count                                         #总数据个数,相当于objects.count
4
>>> p.num_pages                                     #总页码
2
>>> p.page_range                                    # 分页区间 1-2 页,相当于range(2)
[1, 2]
>>> page1 = p.page(1)                               #获取Page类的实例
>>> page1
<Page 1 of 2>
>>> page1.object_list                              #当前页,第一页的所有对象            
['john', 'paul']
>>> page2 = p.page(2)            
>>> page2.object_list
['george', 'ringo']
>>> page2.has_next()                               #第2页是否有下一页
False
>>> page2.has_previous()                           #第2页是否有上一页
True
>>> page2.has_other_pages()                        #第2页是否有其他野
True
>>> page2.next_page_number()                       #第2页的下一页码                 
Traceback (most recent call last):
...
EmptyPage: That page contains no results
>>> page2.previous_page_number()
1
>>> page2.start_index() # The 1-based index of the first item on this page
3
>>> page2.end_index() # The 1-based index of the last item on this page
4
>>> p.page(0)
Traceback (most recent call last):
...
EmptyPage: That page number is less than 1
>>> p.page(3)
Traceback (most recent call last):
...
EmptyPage: That page contains no results

 

转载于:https://my.oschina.net/esdn/blog/835616

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值