Django分頁

分頁:

官方文檔傳送門html

Paginator 類對象的屬性:

  
  
  
  
  

Paginator 類對象的方法:

  
  
  
  
  

 

Page 類對象的屬性:

  
  
  
  
  

Page 類對象的方法:

  
  
  
  
  

 

實例:

  
  
  
  
  

 

  
  
  
  
  
  
  
  
  
  

 

官方文檔

分頁

Django提供了一些類來幫助你管理分頁的數據 -- 也就是說,數據被分在不一樣頁面中,並帶有「上一頁/下一頁」標籤。這些類位於django/core/paginator.py中。node

 

示例

Paginator提供對象的列表,以及你想爲每一頁分配的元素數量,它就會爲你提供訪問每一頁上對象的方法:python

  
  
  
  
  

注意web

注意你能夠向Paginator提供一個列表或元組,Django的QuerySet,或者任何帶有count()__len__()方法的對象。當計算傳入的對象所含對象的數量時,Paginator會首先嚐試調用count(),接着若是傳入的對象沒有count()方法則回退調用 len()。這樣會使相似於Django的QuerySet的對象使用更加高效的 count()方法,若是存在的話。django

 

使用 Paginator

這裏有一些複雜一點的例子,它們在視圖中使用 Paginator 來爲查詢集分頁。咱們提供視圖以及相關的模板來展現如何展現這些結果。這個例子假設你擁有一個已經導入的Contacts模型。api

視圖函數看起來像是這樣:less

  
  
  
  
  

list.html模板中,你會想要包含頁面之間的導航,以及來自對象自己的任何有趣的信息:ide

  
  
  
  
  

 

分頁器 objects

Paginator類擁有如下構造器:函數

  • class Paginator(object_list, per_page, orphans=0, allow_empty_first_page=True)[source]ui

     

所需參數

  • object_list

    A list, tuple, Django QuerySet, or other sliceable object with a count() or __len__() method.

    能夠是一個列表, 元組, Django的結果集, 或者是任何一個能夠迭代的對象

  • per_page

    The maximum number of items to include on a page, not including orphans (see the orphans optional argument below).

 

可選參數

  • orphans

    The minimum number of items allowed on the last page, defaults to zero. Use this when you don’t want to have a last page with very few items. If the last page would normally have a number of items less than or equal to orphans, then those items will be added to the previous page (which becomes the last page) instead of leaving the items on a page by themselves. For example, with 23 items, per_page=10, and orphans=3, there will be two pages; the first page with 10 items and the second (and last) page with 13 items.

    在最後一頁上容許的最小條目數,默認爲零。當你不想要一個只有不多的項目的最後一頁時,就用這個。若是最後一頁一般有一些小於或等於「孤兒」的條目,那麼這些條目將被添加到前一頁(這是最後一頁),而不是本身將條目放在頁面上。例如,有23個條目,「perpage=10」和「孤兒=3」,將有兩頁;第一個頁面有10個條目,第二個(和最後一個)頁面有13個條目。

     

  • allow_empty_first_page

    Whether or not the first page is allowed to be empty. If False and object_list is empty, then an EmptyPage error will be raised.

    第一個頁面是否被容許爲空。若是「False」和「objectlist」是空的,那麼就會出現一個「錯誤」的錯誤。

 

方法

  • Paginator.page(number)[source]

    返回在提供的下標處的Page對象,下標以1開始。若是提供的頁碼不存在,拋出InvalidPage異常。

 

屬性

  • Paginator.count

    全部頁面的對象總數。注意當計算object_list所含對象的數量時, Paginator會首先嚐試調用object_list.count()。若是object_list沒有 count() 方法,Paginator 接着會回退使用len(object_list)。這樣會使相似於Django’s QuerySet的對象使用更加便捷的count()方法,若是存在的話。

  • Paginator.num_pages

    頁面總數。

  • Paginator.page_range

    頁碼的範圍,從1開始,例如[1, 2, 3, 4]

 

InvalidPage exceptions

  • exception InvalidPage[source]

    異常的基類,當paginator傳入一個無效的頁碼時拋出。

Paginator.page()放回在所請求的頁面無效(好比不是一個整數)時,或者不包含任何對象時拋出異常。一般,捕獲InvalidPage異常就夠了,可是若是你想更加精細一些,能夠捕獲如下兩個異常之一:

  • exception PageNotAnInteger[source]

    當向page()提供一個不是整數的值時拋出。

  • exception EmptyPage[source]

    當向page()提供一個有效值,可是那個頁面上沒有任何對象時拋出。

這兩個異常都是InvalidPage的子類,因此你能夠經過簡單的except InvalidPage來處理它們。

 

Page objects

你一般不須要手動構建 Page對象 -- 你能夠從Paginator.page()來得到它們。

  • class Page(object_list, number, paginator)[source]

    當調用len()或者直接迭代一個頁面的時候,它的行爲相似於 Page.object_list 的序列。

 

方法

  • Page.has_next()[source]

    若是有下一頁,則返回True

  • Page.has_previous()[source]

    若是有上一頁,返回 True

  • Page.has_other_pages()[source]

    若是有上一頁下一頁,返回True

  • Page.next_page_number()[source]

    返回下一頁的頁碼。若是下一頁不存在,拋出InvalidPage異常。

  • Page.previous_page_number()[source]

    返回上一頁的頁碼。若是上一頁不存在,拋出InvalidPage異常。

  • Page.start_index()[source]

    返回當前頁上的第一個對象,相對於分頁列表的全部對象的序號,從1開始。好比,將五個對象的列表分爲每頁兩個對象,第二頁的start_index()會返回3

  • Page.end_index()[source]

    返回當前頁上的最後一個對象,相對於分頁列表的全部對象的序號,從1開始。 好比,將五個對象的列表分爲每頁兩個對象,第二頁的end_index() 會返回 4

 

屬性

  • Page.object_list

    當前頁上全部對象的列表。

  • Page.number

    當前頁的序號,從1開始。

相關文章
相關標籤/搜索