Django提供了一个新的类来帮助你管理分页数据,.它可以接收列表、元组或其它可迭代的对象。
一:常用方法
>>> from django.core.paginator import Paginator >>> objects = ['john', 'paul', 'george', 'ringo'] >>> p = Paginator(objects, 2) >>> p.count 4 >>> p.num_pages 2 >>> type(p.page_range) <class 'range_iterator'> >>> p.page_range range(1, 3) >>> page1 = p.page(1) >>> page1 <Page 1 of 2> >>> page1.object_list ['john', 'paul'] >>> page2 = p.page(2) >>> page2.object_list ['george', 'ringo'] >>> page2.has_next() False >>> page2.has_previous() True >>> page2.has_other_pages() True >>> page2.next_page_number() Traceback (most recent call last): ... EmptyPage: That page contains no results >>> page2.previous_page_number() 1 >>> page2.start_index() # The 1-based index of the first item on this page 3 >>> page2.end_index() # The 1-based index of the last item on this page 4 >>> p.page(0) Traceback (most recent call last): ... EmptyPage: That page number is less than 1 >>> p.page(3) Traceback (most recent call last): ... EmptyPage: That page contains no results
二:定义工具
定义工具,可供多个页面使用。
效果如下:
1)定义方法:pages.py
# -*- coding:utf-8 -*- __author__ = 'lixiang' from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger def page(request,post_objects,page_number=20): """ 实现分页 :param request: view中request :param post_objects: 需要实现分页的对象(列表,queryset) :param page_number: #每页显示条数,默认20页 :return: """ #实例化结果集, queryset转列表 post_objects=list(post_objects) paginator = Paginator(post_objects, page_number) # Show 20 contacts per page #获取htmml中传递page值 page = request.GET.get('page',1) try: #需要返回的值 page_objs = paginator.page(page) except PageNotAnInteger: # 如果page不是整数,返回第1页 page_objs = paginator.page(1) except EmptyPage: # 如果page超出最大值 ,只显示最后一页 page_objs = paginator.page(paginator.num_pages) return page_objs