Bonky Zhu
If someone is able to show me that what I think or do is not right, I will happily change, for I seek the truth, by which no one was ever truly harmed. It is the person who continues in his self-deception and ignorance who is harmed.

django 的分页器 – Paginator

django提供了非常好用的分页类 Paginator,类位于django/core/paginator.py

from django.core.paginator import Paginator

Paginator

构造函数

Paginator 类的构造函数如下

Paginator(object_list, per_page, orphans=0, allow_empty_first_page=True)

一般来说常用就前两个选项

  • object_list - 可以是 list,tuple或自己定义的可分割的(sliceable) 的类,自定义类必须包括count()__len__() 两个方法
  • perpage - 一个页面最大可以包含的项目

还有一些可选选项

  • orphans - 作用是最后一页如果少于 orphans,那么最后一页的项目会被加到前一页
  • allow_empty_first_page - 是否允许第一页为空

方法

get_page(number)

返回第 number 页的 page 类,如果输入的不是数字,那就返回第一页;如果是负数或者大于总页数,那么会转到最后一页

Page(number)

返回 page 类,但如果输入不合法,那么就会返回错误InvalidPage

属性

  • count:返回所有的对象(其实就是object_list的长度)
  • num_pages:页的总数
  • page_range:页的序号的一个列表,从1开始

例子

下面是官方文档的一个例子

>>> 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)

>>> p.page_range
range(1, 3)

page

方法

  • has_next - 如果存在下一页返回 True
  • has_previous - 如果存在前一页返回 True
  • has_other_pages - 如果存在下一页或者前一页返回 True
  • next_page_number - 如果存在下一页返回下一页的号码
  • previous_page_number - 如果存在前一页返回前一页的号码
  • start_index - 这一页的首个项目在 object_list 的序号(从1开始)。如总共10个项目,3个一页,那么第二页的start_index 为 4
  • end_index - 这一页的最后一个项目在 object_list 的序号(从1开始)

属性

  • object_list:返回这一页所有的objects
  • number:返回页数
  • paginator:返回相关的Paginator

例子

page 类的使用方法如下

>>> 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
Share

You may also like...

发表评论