分页
Django分页
分页即将数据分为n组,每组有m个数据,能够减轻用户的流量使用,减少不必要客户端内存浪费
python代码:
在views中写入分页代码:
PER_PAGE = 10
def setPage(req):
# 解析参数
pData = req.GET.get('p')
# 查询所有数据
persons = Person.objects.all()
# 实例化分页器 PER_PAGE为自己设立的常变量
paginator = Paginator(persons, PER_PAGE)
# 通过传过来的页码,获取page对象
try:
# 获取page对象
page = paginator.page(pData)
# 将page对象里的数据读取出来,返回给前段页面
result = page.object_list
except:
result = []
data = {
'data': result,
'pageRange': paginator.page_range, # 页数列表
'pageCount': paginator.num_pages, # 页面总数
'page': page,
}
return render(req, 'data.html', data)
-
步骤 :
-
首先解析参数,获取页码 ** 代码中: pData = req.GET.get(‘p’)
-
获取所有数据
-
实例化分页器 ** 代码中:paginator = Paginator(获取到的所有数据, 每一页分配的数据数量)
-
获取page对象 ** 代码中:page = paginator.page(获取到的页码)
-
将page对象中的数据读取出来,可返回给前端页面 ** 代码中:res = page.object_list
-
paginator.num_pages #页面的总数 paginator.page_range # 页码的列表 page.has_next() # 是否有下一页 page.has_previous # 是否有上一页 page.next_page_number() # 下一页的页码 page。previous_page_number() # 上一页的页码 has_other_pages() # 判断是否有上一页或下一页 page.len(): 返回当前页的数据的个数 page.object_list # 当前页面上所有的数据对象 page.number # 当前页的页码值 page.paginator # 当前page关联的Paginator对象
-
在模板中写好html代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>分页</title>
{# 导入bootstrap的css与js#}
<link href="https://cdn.bootcss.com/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
<script src="https://cdn.bootcss.com/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>
</head>
<body>
{#第一个ul传入页面的数据#}
<ul>
{% for d in data %}
<li>{{ d.p_name }}年龄为{{ d.p_age }}</li>
{% endfor %}
</ul>
{#第二个ul传入页码,及上一页与下一页#}
<ul class="pagination">
{# 当上一页没有数据,则跳转至最后一页#}
{% if page.has_previous %}
<li><a href="/app01/setPage?p={{ page.previous_page_number }}">«</a></li>
{% else %}
<li><a href="/app01/setPage?p={{ pageCount }}">«</a></li>
{% endif %}
{% for p in pageRange %}
<li><a href="/app01/setPage?p={{ p }}">{{ p }}</a></li>
{% endfor %}
{# 当下一页没有数据则返回第一页#}
{% if page.has_next %}
<li><a href="/app01/setPage?p={{ page.next_page_number }}">»</a></li>
{% else %}
<li><a href="/app01/setPage?p=1">»</a></li>
{% endif %}
</ul>
</body>
</html>
最后附上效果图:
第三页数据:
第5页数据: