Django——分页功能Paginator
Paginator所需参数:
Paginator(object_list,per_page)
Paginator常用属性:
per_page: 每页显示条目数量
count: 数据总个数
num_pages: 总页数
page_range: 总页数的索引范围,页码的范围,从1开始
page(number) :返回在提供的下标处的Page对象,下标以1开始。
常见错误
PageNotAnInteger:page()传递的不是整数
EmptyPage:page()传递的值有效,但是没有数据
page对象属性:
Page.object_list: 当前页上所有对象的列表
Page.number: 当前页的序号,从1开始
Page.paginator: 相关的Paginator对象
page对象方法:
has_next():判断是否有下一页
has_previous():判断是否有上一页
has_other_pages():判断是否有上一页或下一页
next_page_number():返回下一页的页码
previous_page_number():返回上一页的页码
start_index(): 返回当前页的第一个对象的索引
end_index(): 返回当前页的最后一个对象的索引
基本方法:
from django.core.paginator import Paginator,PageNotAnInteger,EmptyPage def page_test(request): color = ['red','orange','yellow','green','blue','purper'] p = Paginator(color,2) # 实例化分类对象 print(p) print(p.per_page) # 每页显示的数目 print(p.count) # 总的对象数 print(p.num_pages) # 分的页面数 print(p.page_range) # 页码的范围,从1开始 page1 = p.page(1) # 第一页分页对象 page2 = p.page(2) # 第二页分页对象 print(page1.object_list) # 第一页元素列表 print(page2.object_list) # 第二页元素列表 print(page1.number) # 当前页值 1 print(page2.number) # 当前页值 2 print(page1.paginator) # Paginator指的就是p print(page1.has_next()) # 当前页是否有后一页 print(page1.has_previous()) # 当前页是否有前一页 print(page1.has_other_pages()) # 当前页是否有前一页或后一页 print(page1.next_page_number()) # 下一页的页码 print(page2.previous_page_number()) # 上一页的页码 print(page1.start_index()) # 当前页的第一个对象的索引 print(page2.end_index()) # 当前页的最后一个对象的索引 return HttpResponse('XXXXX')
blogs博客列表中的应用
view.py视图函数中:
def list(request): blog_list = BlogModel.objects.all().order_by('id') p = Paginator(blog_list,3) page = request.GET.get('page') blogs = p.page(page) # 1(第一种方式) try: blogs = p.page(page) except PageNotAnInteger: blogs = p.page(1) except EmptyPage: blogs = p.page(p.num_pages) # blogs = p.get_page(page) # 2(第二种方式,封装好的方法) return render(request,'blog/demo_list.html', context={'page':blogs})
blog_list.html 博客列表模板中:
{% if page.has_previous %} <a href="{% url 'blog_list' %}?page={{page.previous_page_number}}">上一页</a> {% endif %} {# {{ page.number }}/{{ page.paginator.num_pages }}#} {% for num in page.paginator.page_range %} {% if num == page.number %} <a href="{% url 'blog_list' %}?page={{ num }}" style="font-size: 33px">{{ num }}</a> {% else %} <a href="{% url 'blog_list' %}?page={{ num }}" >{{ num }}</a> {% endif %} {% endfor %} {% if page.has_next %} <a href="{% url 'blog_list' %}?page= {{ page.next_page_number }}">下一页</a> {% endif %}