官方文档连接地址为:https://docs./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_ |
|