前言
- 分页是指在web页面有大量数据需要显示,为了方便阅读,在每个页面中只显示部分数据。
 优点:
- 方便阅读
 - 减少数据提取量,减轻服务器压力
 
Django提供了 Paginator类 可以方便的实现分页功能
- Paginator类 位于 django.core.paginator模块 中。
 
1、Paginator对象
作用:负责分页数据整体的管理
对象的构造方法:
paginator = Paginator(object_list,per_page)参数:object_list 需要分页数据的对象列表per_page 每页数据个数返回值:Paginator 的对象
1.1、Paginator属性
- count:需要分页数据的对象总数(总共有多少条数据)
 - num_pages:分页后的页面总数(总共分了多少页)
 - page_range:从1开始的range对象,用于记录当前页码数
 - per_page:每页数据的个数
1.2、Paginator方法
 
paginator对象.page(number)
- 参数number为页码信息(从1开始)
 - 返回当前number页对应的页信息
 - 如果提供的页码不存在,抛出 InvalidPage 异常
 
分页练习
numbers = list(range(50)) paginator = Paginator(numbers, 10) # 每页分10个 print(paginator.num_pages) # 总共分了多少页 print(paginator.count) # 总共有多少条数据
<a name="intJa"></a># 2、Page对象<a name="ADQcV"></a>## 定义:负责具体某一页的数据的管理<a name="vZJ5L"></a>## 创建对象Paginator对象的page()方法返回的 Page对象<br />**page = paginator.page(页码)**<a name="qOy26"></a>## Page对象属性- object_list:当前页上所有数据对象的列表- number:当前页的序号,从1开始- paginator:当前page对象相关的Paginator对象- <br />- has_next():如果有下一页返回True- has_previous():如果有上一页返回True- has_other_pages():如果有上一页或下一页返回True- <br />- next_page_number():返回下一页的页码,如果下一页不存在,抛出InvalidPage 异常- previous_page_number():返回上一页的页码,如果上一页不存在,抛出InvalidPage 异常<a name="EXoK8"></a>## 示例:```pythonfrom django.core.paginator import Paginator # 导入 Paginator类# 分页练习numbers = list(range(50))paginator = Paginator(numbers, 10)# 构造Paginator类的实例对象,创建每页分10个print(paginator.num_pages) # 总共分了多少页print(paginator.count) # 总共有多少条数据####### Page对象属性 ##############################################################page_1 = paginator.get_page(1) # 创建Page对象print("page_1.number", page_1.number) # 当前所在的分页print(page_1.has_next()) # 有没有下一页print(page_1.paginator.num_pages) # 用当前页的对象,去获取总共多少页print(page_1.paginator.count) # 用当前页的对象,去获取总共多少条数据print(page_1.has_previous()) # 有没有上一页print(page_1.has_other_pages()) # 有没有其他页print(page_1.next_page_number()) # 下一页的页码# print(page_1.previous_page_number()) #上一页的页码print(page_1.object_list) # 这一页的数据,返回的是一个listprint("第3页", page.get_page(3).object_list)print("page_1.number", page.get_page(3).number)
