django 分页
官方文档连接地址为:https://docs.djangoproject.com/en/2.1/topics/pagination/
在创建分页前先导入模块;
from django.core.paginator import Paginator
paginator对象:
创建格式为:
blogs = Blog.objects.all()
paginator = Paginator(blogs,10)#实例化一个分页对象,设置每一页显示10条
这里创建分页的同时时一般需要注意下我们在models.py是否这是默认排序,否则会弹出提示信息。
paginator属性:
Paginator.count----所有页面中对象的总数
Paginator.num_pages----总页数
Paginator.page_range----页码迭代器
paginator方法:
Paginator.get_page(number)此方法为2.0新方法。
返回Page具有给定的从1开始的索引对象,同时还处理超出范围和无效页码,如果页码不是数字,则返回第一页。如果页码为负数或大于页数,则返回最后一页。
Page对象:
paginator对象的get_page(num)方法返回得到Page对象
page1 = paginator.get_page(1)
Page属性:
Page.object_list----此页面上的对象列表。
Page.number----此页面上从1开始页码。
Page.paginator----关联paginator对象。
Page方法:
Page.has_next()
True如果有下一页则返回。
Page.has_previous()
True如果有上一页,则返回
Page.has_other_pages()
True如果有下一页或上一页,则返回。
Page.next_page_number()
返回下一页编号。InvalidPage如果下一页不存在则引发。
Page.previous_page_number()
返回上一页编号。InvalidPage如果前一页不存在则引发。
Page.start_index()
返回页面上第一个对象的从1开始的索引,相对于分页器列表中的所有对象。例如,当为每页包含2个对象的5个对象的列 表进行分页时,start_index()将返回第二个页面 3。
Page.end_index()
返回页面上最后一个对象的从1开始的索引,相对于分页器列表中的所有对象。例如,当为每页包含2个对象的5个对象的 列表进行分页时,end_index()将返回第二个页面 4。
Page.previous_page_number()
返回上一页
Page.next_page_number()
返回下一页
paginator在views.py中使用:
def blog_list(request):
blogs_all_list = Blog.objects.all()
paginator = Paginator(blogs_all_list,10)
page_num = request.GET.get('page', 1)
page_of_blogs = paginator.get_page(page_num)
blog_types = BlogType.objects.all()
#blogs_counts = Blog.objects.all().count()
return render(request,'myseit/blog_list.html',{'blog_types':blog_types,'page_of_blogs':page_of_blogs,'paginator':paginator})
在html文件中使用:
<div class="panel-heading">{% block list_with_type %}博客列表(一共有{{ page_of_blogs.paginator.count }}博客){% endblock %}</div>
yawns_