Django分页主要用到了django/core/paginator.py模块。
class Paginator(object_list, per_page, orphans=0, allow_empty_first_page=True)
class Paginator(object):
def __init__(self, object_list, per_page, orphans=0,
allow_empty_first_page=True):
self.object_list = object_list
self.per_page = int(per_page)
self.orphans = int(orphans)
self.allow_empty_first_page = allow_empty_first_page
self._num_pages = self._count = None
def validate_number(self, number):
"""
Validates the given 1-based page number.
"""
try:
number = int(number)
except (TypeError, ValueError):
raise PageNotAnInteger('That page number is not an integer')
if number < 1:
raise EmptyPage('That page number is less than 1')
if number > self.num_pages:
if number == 1 and self.allow_empty_first_page:
pass
else:
raise EmptyPage('That page contains no results')
return number
需要的参数:- object_list:可以使列表,元组,或者其它可用count()、__len__()方法的可切片对象。
- per_page:每一页最多可以显示的条目。(最后一页可能会受到orphans设置的影响)
- orphans:设置最后一页显示的最少条目。用来处理非整除的情况下,不让最后一页的条目太少,把最后一页过少的条目添加到之前的页面显示。
- allow_empty_first_page:设置是否允许第一页为空,如果值为False,第一页为空会提示一个EmptyPage的错误。
- paginator.page(number):返回给定索引的页面对象,如果该页面不存在,就提示InvalidPage.
- paginator.count:返回所有页面条目的总数目。
- paginator.num_pages:返回页面的总数目。
- paginator.page_range:返回页面的range,例如[1,2,3,4,5,6,7]。
一般情况下,Page对象是由paginator.page()方法得到的。
class Page(object_list, number, paginator)
方法:
- Page.has_next():如果有下一个页面,返回true。
- Page.has_previous():如果有前一个页面,返回true。
- Page.has_other_pages():前一个页面或者有一个页面,有其中的一个就返回true。
- Page.next_page_number(),Page.previous_page_number():返回下一个、前一个页面的数字,如果不存在返回InvalidPage。
- Page.start_index(),Page.end_index():返回给定页面第一个条目的索引、最后一个条目索引。
- Page.object_list:页面对象的列表。
- Page.number:页面的数字。
- Page.paginator:与页面相关的paginator对象。
视图模块:
模板list.html:
在相对应的urls.py文件中,设置好链接后,显示结果如下: