django分页
作者:互联网
django分页
# 官方文档
https://docs.djangoproject.com/en/3.1/topics/pagination/
需要用到Paginator模块
from django.core.paginator import Paginator
实例
# 先创建model
# 后端代码
from django.core.paginator import Paginator
def get_list(request, pindex):
lists = xxx.objects.all()
# 实例化分页对象
paginator = Paginator(lists, 10) # 10为每页多少数据
if pindex == "": # django中默认返回空值,所以加以判断,并设置默认值为1
pindex = 1
else: # 如果有返回在值,把返回值转为整数型
int(pindex)
page = paginator.page(pindex) # 传递当前页的实例对象到前端
context = {"page": page}
return render(request, "xxx.html", context)
# url
path('xxx/<pindex>', views.get_list)
# 前端代码
<--当前页内容遍历展示-->
{% for item in page %}
..... # 内部展示内容代码
{% endfor %}
<--底部分页按钮显示-->
<nav aria-label="Page navigation">
<div class="pagination">
<ul class="pagination">
{% if page.has_previous %} # 判断当前页是否有上一页
<li><a href="/xxx/{{page.previous_page_number}}" aria-label="Previous">
<span aria-hidden="true">上一页</span></a></li>
{% endif %}
{% for num in page.paginator.page_range%} # 循环遍历页码列表,并展示到底部
{%if pindex == page.number%}
<li><a href="">{{ num }}</a></li>
{%else%}
<li><a href="/xxx/{{num}}">{{ num }}</a></li>
{%endif%}
{% endfor %}
{% if page.has_next %} # 判断当前页是否有下一页
<li><a href="/xxx/{{page.next_page_number}}" aria-label="Next">
<span aria-hidden="true">下一页</span></a></li>
{% endif %}
</ul>
</div>
</nav>
补充知识点:
Paginator类对象的属性:
序号 | 属性名 | 说明 |
---|---|---|
1 | num_pages | 返回分页之后的总页数 |
2 | page_range | 返回分页后的页码列表 |
Paginator类对象的方法:
序号 | 方法名 | 说明 |
---|---|---|
1 | page(self, number) | 返回第number页的page类实例对象 |
Page实例对象的属性:
序号 | 属性名 | 说明 |
---|---|---|
1 | number | 返回当前页的页码 |
2 | object_list | 返回当前页的数据查询集 |
3 | paginator | 返回对应的Paginator类对象 |
Page实例对象的方法:
序号 | 方法名 | 说明 |
---|---|---|
1 | has_previous | 判断当前页是否有前一页 |
2 | has_next | 判断当前页是否有下一页 |
3 | previous_page_number | 返回前一页的页码 |
4 | next_page_number | 返回下一页的页码 |
标签:Paginator,返回,分页,当前页,number,django,pindex,page 来源: https://blog.csdn.net/weixin_45223595/article/details/114582828