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对象中最后一个数据的索引

属性

Page.object_list
此页上的对象列表。
Page.number
此页的基于1的页码。
Page.paginator
关联的Paginator对象。

 

posted @ 2019-06-29 17:03  Jin同学  阅读(98)  评论(0)    收藏  举报