Django分页
在web开发中,经常会将数据库中数据展示在页面上,如果数据过多,就不便全部展示出来,而应该进行分页管理,Django提供了一些工具类便于进行分页管理,这些类全都存于 django/core/paginator.py 包中
使用Paginator
在创建Paginator类时可以传递两个参数,第一个是所有的数据列表,第二个参数是每一页展示的数据条数,通过该类创建的对象,可以获取关于分页的很多信息
from django.core.paginator import Paginator # 数据列表 objects = ['john', 'paul', 'george', 'ringo'] # 创建Paginator对象 p = Paginator(objects, 2) # 获取数据条数 p.count # 结果是 # 获取所有的页数 p.num_pages # 结果是 # 基于1的页码迭代器 p.page_range # range(1, 3) # 返回对应页码的Page对象 page1 = p.page(1) # 获取该页的数据 page1.object_list # ['john', 'paul'] # 是否有下一页 page2.has_next() #False # 是否有上一页 page2.has_previous() #True # 是否有上一页或者下一页 page2.has_other_pages() # True # 返回下一页的编号,如果没有,会出现EmptyPage异常 page2.next_page_number() # 返回上一页编号,如果没有,出现EmptyPage异常 page2.previous_page_number() # 返回Page对象中第一个数据的索引 page2.start_index() # 返回Page对象中最后一个数据的索引 page2.end_index()
Paginator对象
Paginator类的构造方法如下:
class Paginator(object_list,per_page,orphans = 0,allow_empty_first_page = True)
必选参数
object_list
传入分页数据的列表,元组或者QuerySet对象,抑或其他可切片对象
per_page
每一页展示的数据条数
可选参数
orphans
分页分到最后一页的时候,可能只有很少的几条信息了,如果这个时候不希望最后一页只展示寥寥几条数据,便可以将多余的几条数据添加到上一页。当最后一页的数据小于或等于orphans时,便可合并,例如有23条数据,现在per_page=10,orphans=3。那么就会得到两页数据,一页展示10条,第二页展示13条数据。
allow_empty_first_page
是否允许第一页为空,如果不允许,当传入的列表为空时,会出现EmptyPage错误
方法
Paginator.get_page(页码)
获取指定页码的Page对象,如果传入的不是数字,返回第一页,如果传入的是负数或大于页数的数字,就返回最后一页
属性
Paginator.count
获取所有的数据条数
Paginator.num_pages
获取总页数
Page对象
我们通常不会手动实例化Page对象,一般通过Paginator.get_page(页码)获取
方法
Page.has_next()- 如果有下一页则返回True。
Page.has_previous()如果有上一页,则返回True。
Page.has_other_pages()如果有下一页或上一页,则返回True。
Page.next_page_number()返回下一页编号。如果下一页不存在则引发InvalidPage错误。
Page.previous_page_number()返回上一页编号。如果前一页不存在则引发InvalidPage错误。
Page.start_index()返回Page对象中第一个数据的索引
Page.end_index()返回Page对象中最后一个数据的索引

浙公网安备 33010602011771号