django Paginator 分页
-
Django提供了一些类来帮助您管理分页数据 - 即分布在多个页面上的数据,使用“上一页/下一页”链接。这些教程都在django/core/paginator.py。
-
下面的例子能够让你们体验django自带的分页功能
-
Python manage.py shell
-
#首先导入相应的模块 >>> from django.core.paginator import Paginator #建一个列表 >>> objects = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19] >>> p = Paginator(objects, 2) #这一句代表的是把objects列表分为每页2条数据 >>> p.count #objects总数 >>> 20 >>> p.num_pages #一共多少页 >>> 10 >>> p.page_range #把总页数变为range >>> range(1, 11) >>> page1 = p.page(1) #第一页是一个<page 1 of 10>类型 >>> page1.object_list #<page 1 of 10>类型的具体数据 >>> page1.has_next() #布尔类型,是否有下一页 >>> page1.has_previous() #布尔类型,是否有上一页 >>> page1.has_other_pages() #如果有上一页或下一页,返回True。 >>> page1.next_page_number() #返回下一页的页码。如果下一页不存在,抛出InvlidPage异常。 >>> page1.previous_page_number() 返回上一页的页码。如果上一页不存在,抛出InvalidPage异常。 >>> page1.start_index() #返回当前页上的第一个对象,相对于分页列表的所有对象的序号,从1开始。比如,将 五个对象的列表分为每页两个对象,第二页的start_index()会返回3。 >>> page.end_index() #返回当前页上的最后一个对象,相对于分页列表的所有对象的序号,从1开始。 比如,将 五个对象的列表分为每页两个对象,第二页的end_index() 会返回 4 >>> >>> page1.object_list #当前页上所有对象的列表。 >>> page1.number #当前页的序号,从1开始。 >>> page1.paginator #相关的Paginator对象
-
上面只是Paginator的方法和属性,接下来就来一个demo
-
现在做一个网站,并且是首页只显示5页的内容,那么接下来有分析一下该怎么做
-
# 要求:页面上只显示5页 分以下几种情况 1.总页数小于五页,页面上显示所有页码 2.如果当前页是前三页,显示1-5页 3.如果当前页是后三页,显示后5页 4.其他情况,显示当前页的前2页,当前页的后两页 demo: from django.core.paginator import Paginator objects = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19] num_pages = Paginator(objects,2).num_pages #总页数 page = Paginator(onjects,2).page(1).number #当前页 if num_pages < 5: pages = range(1,num_pages+1) elif num_pages <=3: pages = range(1,6) elif num_pages - page <= 2: pages = range(num_pages-4,num_pages+1) else: page = range(page-2,page+3)