前言
- 分页是指在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>
## 示例:
```python
from 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) # 这一页的数据,返回的是一个list
print("第3页", page.get_page(3).object_list)
print("page_1.number", page.get_page(3).number)