1、分页的定义
2、Paginator对象
1)Paginator的属性
2)paginator的方法
Paginator异常exception
3、page对象
1)定义
2)page对象方法
3)实操演练
views.py中:
from django.core.paginator import Paginator
from django.shortcuts import render
def test_page(request):
all_data = ['a', 'b', 'c', 'd', 'e']
# 获取当前页码的方案:
# 方案1、/test/page/1
# 方案2、/test/page?page=1
page_num = request.GET.get('page', 1)
# 初始化Paginator
paginator = Paginator(all_data, 2)
# 初始化具体页码的page对象
current_page = paginator.page(int(page_num))
return render(request, 'test_page.html', locals())
此外,paginator和paginator.page(page_number)的返回值如下:
from django.core.paginator import Paginator
from django.shortcuts import render
def test_page(request):
all_data = ['a', 'b', 'c', 'd', 'e']
# 获取当前页码的方案:
# 方案1、/test/page/1
# 方案2、/test/page?page=1
page_num = request.GET.get('page', 1)
# 初始化Paginator
paginator = Paginator(all_data, 2)
print("paginator: ", paginator)
# 初始化具体页码的page对象
current_page = paginator.page(int(page_num))
print(current_page)
for i in current_page:
print(i)
return render(request, 'test_page.html', locals())
输出:
paginator: <django.core.paginator.Paginator object at 0x10bc196d8>
current_page: <Page 3 of 3>
a
b
templates/test_page.html中:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>分页</title>
</head>
<body>
{% for p in current_page %}
<p>
{{ p }}
</p>
{% endfor %}
{% if current_page.has_previous %}
<a href="/test_page?page={{ current_page.previous_page_number }}">上一页</a>
{% else %}
首页
{% endif %}
{% for p_num in paginator.page_range %}
{% if p_num == current_page.number %}
{{ p_num }}
{% else %}
<a href="/test_page?page={{ p_num }}">{{ p_num }}</a>
{% endif %}
{% endfor %}
{% if current_page.has_next %}
<a href="/test_page?page={{ current_page.next_page_number }}">下一页</a>
{% else %}
尾页
{% endif %}
</body>
</html>
urls.py中
from django.contrib import admin
from django.urls import path
from . import views
urlpatterns = [
path('admin/', admin.site.urls),
path('test_page/', views.test_page),
]