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文件中,設置好鏈接後,顯示結果如下: