Django-分页
Paginator对象
- 创建对象
- Paginator(数据集合, int)
- 返回分页对象,参数1为要分页的数据集合,参数2为每页有几条数据
- 属性:
count
:对象总数num_pages
:页码数page_range
:页码列表,从1开始
- 方法:
page(num)
- num是页码,从1开始。会创建一个page对象,该对象存储当前页码的数据,如果页码不存在会抛出InvalidPage异常
- 异常:
InvalidPage
:当向page()传递一个无效的页码时抛出PageNotAnInteger
:当向page()传递一个不是整数的值时抛出EmptyPage
:当向page()提供了一个有效值,但是那个页码上没有任何的对象时抛出
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),
]