24、Django-网站分页功能-Pagintor类
-Django提供了Paginator类可以方便的实现分页功能
-Painator 类 位于 django.core.pagintor 模块中
负责分页数据整体的管理
对象的构造方法:
paginator = Paginator(object_list, per_page)
- 参数:
- object_list :需要分页的数据的对象列表-数据的个数
- per_page:每页数据的个数
- 返回值:
- Paginator的对象
Paginator的属性:
- count:需要分页数据的对象总数
- num_page:分页后的页面总数
- page_range:从1开始的range对象、用于记录当前的页码
- per_page 每页数据的个数
Pagintor方法:
paginator对象.page(number)
- 参数:number为页码信息(从1开始)
- 返回当前number 页对应的页面信息
- 如果提供的页码不存在、抛出InvalidPage异常
page对象 定义:
- 负责具体某一页的数据管理
- 创建对象
- Paginator对象的page()方法返回Page对象
- page = pageinator.page(页码)
Page对象属性:
- object_list:当前页面上所有数据对象的列表
- number:当前页面的序号、从1开始
- paginator:当前page对象相关的Pageinator对象
Page对象方法:
- has_next(): 如果有下一页返回True
- has_previous():如果有上一页返回True
- has_other_pages():如果有上一页或下一页返回True
- next_page_number():返回下一页的页码、如果下一页不存在、抛出InvalidPage异常
- previous_page_number():返回上一页的页码、如果上一页不存在、抛出InvalidPage异常
案例
views.py
---------------------------------------------------------------
#分页功能
def test_page(request):
# 获取页码
page_num = request.GET.get('page', 1)
all_data = ['a', 'b', 'c', 'd', 'e']
# 创建分页对象 5个数据一页
paginator = Paginator(all_data, 2)
#初始化 具体页码page对象
c_page = paginator.page(int(page_num))
return render(request, 'test_page.html', locals())
-----------------------------------------------------------------------
test_page.html
---------------------------------------------------------------------
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>分页</title>
</head>
<body>
{% for p in c_page %}
<p>
{{ p }}
</p>
{% endfor %}
{% if c_page.haas_previous %}
<a href="/p_page?page={{ c_page.previous_page_number }}">上一页</a>
{% else %}
上一页
{% endif %}
{% for p_num in paginator.page_range %}
{% if p_num == c_page.number %}
{{ p_num }}
{% else %}
<a href="/p_page?page={{ p_num }}">{{ p_num }}</a>
{% endif %}
{% endfor %}
{% if c_page.has_next %}
<a href="/p_page?page={{ c_page.next_page_number }}">下一页</a>
{% else %}
下一页
{% endif %}
</body>
</html>
---------------------------------------------------------------------------
urls.py
---------------------------------------------------------------------
from django.contrib import admin
from django.urls import path
from midware import views
urlpatterns = [
path('p_page/', views.test_page),
]
---------------------------------------------------------------