目录
Django 提供了一些类来帮助你管理分页数据 ——也就是说,数据被分割在几个页面上,并带有 “上一页/下一页” 的链接。这些类位于 django/core/paginator.py中。
paginator类
在使用django提供的分页器之前,需要这个paginator类创建一个对象,下面介绍这个类的属性
class (object_list, per_page, orphans=0, allow_empty_first_page=True)
- object_list
- 必要的。一个列表、元组、 或其他具有 或 方法的可切片对象。为了实现一致的分页, 应该是有序的。即就是进行分页操作的数据
- per_page
- 必要的。一个页面中包含的最大项目数,不包括 orphans
- orphans
- 可选的。当你不希望最后一页的项目数量很少时,使用这个选项。如果最后一页的项目数量通常小于或等于 ,那么这些项目将被添加到前一页(成为最后一页),而不是让这些项目单独留在一页上。
- allow_empty_first_page
- 可选的。是否允许第一页为空。如果 并且 是空的,则会出现错误。
Falseobject_list EmptyPage
,默认是False
- 可选的。是否允许第一页为空。如果 并且 是空的,则会出现错误。
paginator常用方法
get_page
(int)-
返回一个给定的基于 1 索引的page对象,同时处理超出范围和无效的页码。如果页数不是数字,它返回第一页。如果页码为负数或大于页数,则返回最后一页。只有当你指定了 并且 为空时,才会引发Emptypage 异常。
-
-
page
(int)-
返回一个Pge对象,该对象具有给定的从 1 开始的索引。如果无法通过调用 转换为整数,则引发PageNotAnInteger。如果给定的页码不存在,则引发空页。
number
int()
-
paginator属性
- count
- 所有页面的对象总数。
- num_pages
- 总页数
- page_range
- 以 1 为基础的页码范围迭代器,例如产生 。
[1,2,3,4]
- 以 1 为基础的页码范围迭代器,例如产生 。
Page
类
通过迭代 Paginator,或使用Paginator.pafe() 获得它们。可以理解为通用分页器分页后每一页的数据。
类 (object_list, 数字, 分页器)
当使用 或直接迭代时,一个页面就像一个Page.object_list的序列。len()
Page常用方法
has_next
()- 如果有下一页,返回 。
True
- 如果有下一页,返回 。
has_previous
()- 如果有上一页,返回 。
True
- 如果有上一页,返回 。
has_other_pages
()- 如果有下一页 或 上一页,返回 。
True
- 如果有下一页 或 上一页,返回 。
next_page_number
()- 返回下一页的页码。如果下一页不存在,则引发 Invalidpage异常。
-
previous_page_number
()- 返回上一页的页码。如果上一页不存在,则引发 Invalidpage异常。
-
start_index
()- 返回页面上第一个对象,相对于分页器列表中所有对象的基于 1 的索引。
-
end_index
()- 返回页面上最后一个对象相对于分页器列表中所有对象的基于 1 的索引。
Page常用属性
- object_list
- 此页上的对象列表。
- number
- 此页的基于 1 的页码。
- paginator
- 关联的分页器对象。
异常
- InvalidPage
- 当分页器被传递一个无效的页码时引发异常的基类。
- PageNotAnInteger
- 当 page()的值不是整数时发生该事件。
- EmptyPage
- 当page() 被赋予一个有效的值,但该页面上没有对象存在时,引发该异常。
- 后面两个都是InvalidPage的子类。