为四川人民祈祷! www.onefoundation.cn

Django Pagination

新翻译完成的 Django Pagination, djangodoccn虽然进度很慢, 但是还是 keep going.


分页系统

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 异常.

属性

count -- 对象总数, 包括所有页面.

num_pages -- 总页码数.

page_range -- 从1开始的页码, 例如, [1, 2, 3, 4].

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.

属性

object_list -- 当前页面对象上对应的元素列表.

number -- 当前对象的页码(从1开始).

paginator -- 指向对应的 Paginator 对象.

QuerySetPaginator 对象

如果使用 Django 数据库 API 中的 QuerySet``的话, 请使用 ``QuerySetPaginator 来代替 Paginator. 这会提高效率, 并且这两个类在 API 上并不存在任何差异.

之前的 ObjectPaginator

PaginatorPage 类是在 Django 开发版本新加入的(版本 7306). 在此之前的版本中, Django 提供了provided an具有类似功能的 ObjectPaginator 类, 但是使用起来不够方便. ObjectPaginator 类仍然会被保留, 作为向后兼容. 但是当你试图使用它的时候 Django 会提示 DeprecationWarning.

 
by kernel1983
Comments »
Leave a Comment:
code:750