django的分页我们引用它自带的Paginator就可以了
1、在usl.py中添加路由
#测试分页
url(r'^page/$', views.PageTurning),
2、view.py处代码
def PageTurning(request):
data_li = ['join','paul','george','ringo']
obj_li = models.Userinfo.objects.all()
#表示一页显示3条数据
p = Paginator(obj_li,3)
print('数据总数:',p.count)
print('数据页数:',p.num_pages)
print('页码列表,range(x,y)',p.page_range)
print('是否有下一页',p.page(2).has_next())
print('是否有上一页',p.page(1).has_previous())
print('是否有其他页',p.page(1).has_other_pages())
print('下一页的页码',p.page(2).next_page_number())
print('上一页的页码',p.page(2).previous_page_number())
#获取页码,不输入页码的情况下,默认是1.页码获取的都是str,所以要int
get_page = int(request.GET.get('page',1))
try:
obj_li = p.page(get_page)
#如果页码不是一个整数,跳转到第一页
except PageNotAnInteger:
obj_li = p.page(1)
#如果页数超出了页数范围,将定位到最后一页
except EmptyPage:
obj_li = p.page(p.num_pages)
return render(request,'paging.html',locals())
#return HttpResponse('测试分页')
访问http://127.0.0.1:8080/page:
控制台会有输出:因为页码在里面被我写死了
数据总数: 11
数据页数: 4
页码列表,range(x,y) range(1, 5)
是否有下一页 True
是否有上一页 False
是否有其他页 True
下一页的页码 3
上一页的页码 1
3、templates中的html代码
新建一个paging.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>django分页</title>
</head>
<body>
<div class="container">
<h4>用户表分页展示</h4>
<table>
<tbody>
{% for item in obj_li %}
<tr>
<td>{{ item.username }}</td>
<td>{{ item.password }}</td>
<td>{{ item.name}}</td>
</tr>
{% endfor %}
</tbody>
</table>
<div>
<ul class="pagination" id="pager">
<!--如果有上一页就拿到上一页的地址-->
{% if obj_li.has_previous %}
<li class="previous"><a href="/page/?page={{ obj_li.previous_page_number }}">上一页</a></li>
{% else %}
<li class="previous disabled"><a href="#">上一页</a></li>
{% endif %}
<!--遍历页数列表-->
{% for num in p.page_range %}
{% if num == page %}
<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 %}
{% endfor %}
<!--如果有下一页就拿到下一页的地址-->
{% if obj_li.has_next %}
<li class="next"><a href="/page/?page={{ obj_li.next_page_number }}">下一页</a></li>
{% else %}
<li class="next disabled"><a href="#">下一页</a></li>
{% endif %}
</ul>
</div>
</div>
</body>
</html>
此时我们就可以通过页面测试分页了,因为没有样式,所以显示不好看,但是功能齐全
|
|