分页就是页面显示的内容过多,分多页来显示,如论坛的帖子、电子书籍等
views.py页面分页配置如下
from django.core.paginator import Paginator,EmptyPage,PageNotAnInteger
def page(request):
user_list = models.UserInfo.objects.all().order_by("id") #获取的所有对象使用id排序
p = Paginator(user_list, 2) #创建一个分页器对象,2个内容作为一页
print("数据总数:", p.count) #获取总共多少数据对象
print("数据页数:", p.num_pages) #获取总页码数
print("range(x,y):", p.page_range) #页码的区间
print("是否有下一页:", p.page(2).has_next()) #第二页是否有下一页
print("是否有上一页:", p.page(2).has_previous()) #第二页是否有上一页
print("是否有其他页:", p.page(2).has_other_pages()) #第二页是否有其他页
print("下一页的页码:", p.page(2).next_page_number()) #第二页下一页的页码
print("上一页的页码:", p.page(2).previous_page_number()) #第二页上一页的页码
page_num = int(request.GET.get('page',1)) #得到请求的页码数,默认是第一页(需要转换为int类型)
try:
userobj_list = p.page(page_num) #获取该页码数的数据对象集
except PageNotAnInteger:
userobj_list = p.page(1) #如果获取的页码数不是int类型跳到第一页
except EmptyPage:
userobj_list = p.page(p.num_pages) #如果没有获取到页码数跳到最后一页
return render(request,"page.html",locals())
page.html里的代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>users</title>
</head>
<body>
<table>
<tr>
<th>用户名</th>
<th>密码</th>
<th>姓名</th>
</tr>
{% for item in userobj_list %}
<tr>
<th>{{ item.username }}</th>
<th>{{ item.password }}</th>
<th>{{ item.name }}</th>
</tr>
{% endfor %}
<ul class="pagination" id="pager">
<tr>
<th>
{% if userobj_list.has_previous %} {#判断是否有上一页#}
<li class="previous"><a href="/page/?page={{ userobj_list.previous_page_number }}">上一页</a></li> {#有上一页显示,用a标签发送上一页的页码数#}
{% else %}
<li class="previous disabled"><a href="#">上一页</a></li> {#没有上一页不显示#}
{% endif %}
</th>
{% for num in p.page_range %} {#循环显示所有的页码#}
<th>
{% if num == page_num %}
<li class="item active"><a href="/page/?page={{ num }}">{{ num }}</a></li>
{% else %}
<li class="item"><a href="/page/?page={{ num }}">{{ num }}</a></li>
{% endif %}
</th>
{% endfor %}
<th>
{% if userobj_list.has_next %}
<li class="next"><a href="/page/?page={{ userobj_list.next_page_number }}">下一页</a></li>
{% else %}
<li class="next disabled"><a href="#">下一页</a></li>
{% endif %}
</th>
</tr>
</ul>
</table>
</body>
</html>