django提供了分页Paginator类,构造:
__init__(self, object_list, per_page, orphans=0, allow_empty_first_page=True):
object_list 要被分页的 list
per_page 每页大小 int
orphans 最后一页允许的大小 int
allow_empty_first_page 是否允许第一页为空
此外,该Paginator有属性:
count 获取总数
num_pages 获取页数
page_range 获取所有页码
这是一个通用的分页程序,会遍历处理object_list,处理步骤:
1、检查object_list是否有序,无序则抛出警告
2、用户调用page(number),传入页码则返回相应的页
3、在page中,首先校验number为从1开始到总页数的数字,且若设置了allow_empty_first_page在页数大于总页数无数据的情况下也视为正常
4、之后计算边界,同时判断最后一页的大小是否满足orphans,不满足则添加到本页一起返回
5、调用Page构造器,接收object_list, number, paginator,构造一个Page出来。
6、用户使用Page:
可调用len在其上获得数量
可按照数组使用获得值
有has_next判断是否还有下一页了
有has_previous判断是否有前一页,即判断number是否为1
有has_other_pages为有has_next或有has_previous
有next_page_number、previous_page_number
有start_index、end_index获得该页数据在所有数据中的索引