Django Pagination
分页系统
Django 开发版本新加入
Django 为需要分页的数据提供了一些类. 具体说就是那些, 需要被分成若干页的数据, 通常有 "上一页/下一页" 的超链接. 这些类被放在 django/core/paginator.py 模块文件里.
示范
给 Paginator 传入一个对象列表, 以及每页需要显示的数量, 然后对象就可以告诉你分页后的数据:
>>> from django.core.paginator import Paginator >>> objects = ['john', 'paul', 'george', 'ringo'] >>> p = Paginator(objects, 2)
>>> p.count 4 >>> p.num_pages 2 >>> p.page_range [1, 2]
>>> page1 = p.page(1) >>> page1>>> 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() 3 >>> 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): ... InvalidPage >>> p.page(3) Traceback (most recent call last): ... InvalidPage
Paginator 对象
方法
page(number) -- 传入一个的页码(从1开始), 返回对应的 Page 对象. 如果所给的参数不存在(越界)就会抛出 InvalidPage 异常.
Page 对象
方法
has_next() -- 如果有下一页, 返回 True.
has_previous() -- 如果有上一页, 返回 True.
has_other_pages() -- 如果不是第一页也不是最后一页, 返回 True.
next_page_number() -- 返回下一页的页码. 请注意此方法有些 "愚蠢", 不管接下来的页码是否存在都会返回一个数字.
previous_page_number() -- 返回上一页的页码. 请注意此方法有些 "愚蠢", 不管接下来的页码是否存在都会返回一个数字.
start_index() -- 返回当前页面对象列表中最开始对象的序号(从1开始), 相对于页码对象列表中的元素. 例如, 当页码对象列表中一共有5个对象, 并且设定每页对象个数为2, 则第二个page对象的 start_index() 方法返回 3.
end_index() -- 返回当前页面对象列表中最后对象的序号(从1开始), 相对于页码对象列表中的元素. 例如, 当页码对象列表中一共有5个对象, 并且设定每页对象个数为2, 则第二个page对象的 end_index() 方法返回 4.
QuerySetPaginator 对象
如果使用 Django 数据库 API 中的 QuerySet``的话, 请使用 ``QuerySetPaginator 来代替 Paginator. 这会提高效率, 并且这两个类在 API 上并不存在任何差异.
之前的 ObjectPaginator 类
Paginator 和 Page 类是在 Django 开发版本新加入的(版本 7306). 在此之前的版本中, Django 提供了provided an具有类似功能的 ObjectPaginator 类, 但是使用起来不够方便. ObjectPaginator 类仍然会被保留, 作为向后兼容. 但是当你试图使用它的时候 Django 会提示 DeprecationWarning.
feed