web-django-02-分页示例

1 django 分页功能

app01/views.py Paginator模块的使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
def users(request):
from django.core.paginator import Paginator,EmptyPage,PageNotAnInteger
user_list = models.UserInfo.objects.all()
paginator = Paginator(user_list,10)
# paginator.per_page 每页显示条目数量
# paginator.count 数据总个数
# paginator.num_pages 总页数
# paginator.page_range 总页数的索引范围,如(1,10),(1,20)
current_page = request.GET.get('p')
try:
page_obj=paginator.page(current_page)
except EmptyPage as e:
page_obj = paginator.page(1)
except PageNotAnInteger as e:
page_obj = paginator.page(1)
# page_obj.has_next() 是否有下一页
# page_obj.next_page_number() 下一页页码
# page_obj.has_previous() 是否有上一页
# page_obj.previous_page_number() 上一页页码
# page_obj.object_list 分页之后的数据列表
# page_obj.number 当前页
# page_obj.paginator paginator对象

return render(request,"users.html", {'page_obj':page_obj})

templates/users.html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
{% if page_obj.has_previous %}
<a href="/users?p={{ page_obj.previous_page_number }}">上一页</a>
{% else %}
<a href="#">上一页</a>
{% endif %}

{% for i in page_obj.paginator.page_range %}
<a href="/users?p={{ i }}">{{ i }}</a>
{% endfor %}

{% if page_obj.has_next %}
<a href="/users?p={{ page_obj.next_page_number }}">下一页</a>
{% else %}
<a href="#">下一页</a>
{% endif %}
<span>
<a>{{ page_obj.number }}/{{ page_obj.paginator.num_pages }}</a>
</span>
</div>