导入分页的包
from django.core.paginator import Paginator
1.类方法
- Page.has_next() 如果有下一页,则返回True。
- Page.has_previous() 如果有上一页,返回 True。
- Page.has_other_pages() 如果有上一页或下一页,返回True。
- Page.next_page_number() 返回下一页的页码。如果下一页不存在,抛出InvlidPage异常。
- Page.previous_page_number() 返回上一页的页码。如果上一页不存在,抛出InvalidPage异常。
- Page.start_index() 返回当前页上的第一个对象,相对于分页列表的所有对象的序号,从1开始。比如,将五个对象的列表分为每页两个对象,第二页的start_index()会返回3。
- Page.end_index() 返回当前页上的最后一个对象,相对于分页列表的所有对象的序号,从1开始。 比如,将五个对象的列表分为每页两个对象,第二页的end_index() 会返回 4。
2.类属型
- Page.object_list 当前页上所有对象的列表。
- Page.number 当前页的序号,从1开始。
- Page.paginator 相关的Paginator对象。
分页例子:
from django.shortcuts import render,HttpResponse
from .models import User
from django.core.paginator import Paginator
def users(req):
cur_page = req.GET.get("cur_page")
res = User.objects.all()
paginator = Paginator(res,10)#每页显示十个
user_list = paginator.page(cur_page)#显示当前页的内容
return render(req,"login.html",{"user_list":user_list})
html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h2>人员名单</h2>
<ul>
{% for item in user_list.object_list %}
<li>{{ item.username }}</li>
{% endfor %}
</ul>
<div>
#上一页按钮
{% if user_list.has_previous %}
<a href="?cur_page={{ user_list.previous_page_number }}">上一页</a>
{% endif %}
#页码显示
{% for item in user_list.paginator.page_range %}
{% if item == user_list.number %}
<a href="?cur_page={{ item }}" style="display: inline-block;color: red;background-color: mediumblue" >{{ item }}</a>
{% else%}
<a href="?cur_page={{ item }}">{{ item }}</a>
{% endif %}
{% endfor %}
#下一页按钮
{% if user_list.has_next %}
<a href="?cur_page={{ user_list.next_page_number }}">下一页</a>
{% endif %}
</div>
</body>
</html>