Django - 分页
- 创建对象
- Paginator (数据集合,int)
- 返回分页对象,参数 1 为要分页的数据集合,参数 2 为每页有几条数据
- 属性:
count
:对象总数num_pages
:页码数page_range
:页码列表,从 1 开始
- 方法:
page(num)
- num 是页码,从 1 开始。会创建一个 page 对象,该对象存储当前页码的数据,如果页码不存在会抛出 InvalidPage 异常
- 异常:
InvalidPage
:当向 page () 传递一个无效的页码时抛出PageNotAnInteger
:当向 page () 传递一个不是整数的值时抛出EmptyPage
:当向 page () 提供了一个有效值,但是那个页码上没有任何的对象时抛出
- 创建对象:Paginator 对象的 page () 方法返回 Page 对象,不需要手动构建
- 属性:
object_list
:当前页上的所有对象列表number
:当前页的页码,从 1 开始paginator
:- 当前 page 对象的相关的 Paginator 对象
- 注意:一个 paginator 对象使用 page () 函数创建了一个 page 对象,该 page 对象中有一个 paginator 属性,该属性引用了创建该 page 对象的那个 paginator 对象
- 方法:
has_next()
:如果有下一页返回 Truehas_previous()
:如果有上一页返回 Truehas_other_pages()
:如果有上一页或者下一页返回 Truenext_page_number()
:返回下一页的页码,如果下一页不存在抛出 InvalidPage 异常previous_page_number()
:返回上一页的页码,如果上一页不存在抛出 InvalidPage 异常len()
:返回上一页的页码,如果上一页不存在抛出 InvalidPage 异常
视图:
1
2
3
4
5
6
7
8
9
10
11
12
13
14from django.core.paginator import Paginator
def students(request, num):
allStus = Student.objects.all()
# 每页分6条数据
paginator = Paginator(allStus, 6)
stus = paginator.page(num)
print(stus)
print(type(stus))
print(stus.object_list)
print(type(stus.object_list))
return render(request, "myApp/students.html", {"stus": stus})模板:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<html lang="en">
<head>
<meta charset="UTF-8">
<title>学生信息</title>
</head>
<body>
<ul>
{% for stu in stus %}
<li>{{ stu.name }}--{{ stu.grade }}--{{ stu.age }}</li>
{% endfor %}
</ul>
{% if stus.has_previous %}
<a href="/students/{{ stus.previous_page_number }}/">上一页</a>
{% endif %}
{% for index in stus.paginator.page_range %}
{% if index == stus.number %}
{{ index }}
{% else %}
<a href="/students/{{ index }}/">{{ index }}</a>
{% endif %}
{% endfor %}
{% if stus.has_next %}
<a href="/students/{{ stus.next_page_number }}/">下一页</a>
{% endif %}
</body>
</html>url:
1
2
3
4urlpatterns = [
url(r'^$', views.index),
url(r'^students/(\d+)/$', views.students),
]