PaginatorLink to this heading

Django tillhandahåller några klasser som hjälper dig att hantera paginerad data - det vill säga data som är uppdelad på flera sidor, med ”Föregående/Nästa”-länkar. Dessa klasser finns i django/core/paginator.py.

För exempel, se Pagination topic guide.

klassen PaginatorLink to this heading

class Paginator(object_list, per_page, orphans=0, allow_empty_first_page=True, error_messages=None)Link to this definition

En paginator fungerar som en sekvens av Page när du använder len() eller itererar den direkt.

Paginator.object_listLink to this definition

Krävs. En lista, tupel, QuerySet eller annat objekt som kan skäras med en count() eller __len__() metod. För konsekvent paginering bör QuerySet beställas, t.ex. med en order_by() klausul eller med en standard ordering på modellen.

Paginator.per_pageLink to this definition

Obligatoriskt. Det maximala antalet objekt som ska inkluderas på en sida, exklusive föräldralösa barn (se det valfria argumentet orphans nedan).

Paginator.orphansLink to this definition

Valfritt. Använd detta när du inte vill ha en sista sida med mycket få objekt. Om den sista sidan normalt skulle ha ett antal objekt som är mindre än eller lika med orphans, läggs dessa objekt till på föregående sida (som blir den sista sidan) i stället för att objekten lämnas på en sida för sig själva. Om det t.ex. finns 23 objekt, per_page=10 och orphans=3, kommer det att finnas två sidor: den första sidan med 10 objekt och den andra (och sista) sidan med 13 objekt. orphans är noll som standard, vilket innebär att sidorna aldrig kombineras och att den sista sidan kan ha ett objekt.

Paginator.allow_empty_first_pageLink to this definition

Valfritt. Huruvida den första sidan får vara tom eller inte. Om False och object_list är tom, så kommer ett EmptyPage fel att uppstå.

Paginator.error_messagesLink to this definition

Med argumentet error_messages kan du åsidosätta de standardmeddelanden som paginatorn kommer att ge. Skicka in en ordbok med nycklar som matchar de felmeddelanden som du vill åsidosätta. Tillgängliga nycklar för felmeddelanden är: invalid_page, min_page och no_results.

Här är till exempel standardfelmeddelandet:

Python console
>>> from django.core.paginator import Paginator
>>> paginator = Paginator([1, 2, 3], 2)
>>> paginator.page(5)
Traceback (most recent call last):
  ...
EmptyPage: That page contains no results

Och här är ett anpassat felmeddelande:

Python console
>>> paginator = Paginator(
...     [1, 2, 3],
...     2,
...     error_messages={"no_results": "Page does not exist"},
... )
>>> paginator.page(5)
Traceback (most recent call last):
  ...
EmptyPage: Page does not exist

MetoderLink to this heading

Paginator.get_page(number)Link to this definition

Returnerar ett Page-objekt med det angivna 1-baserade indexet och hanterar även sidnummer utanför intervallet och ogiltiga sidnummer.

Om sidan inte är en siffra returneras den första sidan. Om sidnumret är negativt eller större än antalet sidor, returneras den sista sidan.

Utlöser ett EmptyPage-undantag endast om du anger Paginator(..., allow_empty_first_page=False) och object_list är tom.

Paginator.page(number)Link to this definition

Returnerar ett Page-objekt med det angivna 1-baserade indexet. Utlöser PageNotAnInteger om number inte kan konverteras till ett heltal genom att anropa int(). Raises EmptyPage om det angivna sidnumret inte existerar.

Paginator.get_elided_page_range(number, *, on_each_side=3, on_ends=2)Link to this definition

Returnerar en 1-baserad lista med sidnummer som liknar Paginator.page_range, men kan lägga till en ellips på endera eller båda sidorna av det aktuella sidnumret om Paginator.num_pages är stort.

Antalet sidor som ska inkluderas på varje sida av det aktuella sidnumret bestäms av argumentet on_each_side, som har standardvärdet 3.

Antalet sidor som ska inkluderas i början och slutet av sidintervallet bestäms av argumentet on_ends, som har standardvärdet 2.

Med standardvärdena för på_varje_sida och på_slut blir till exempel sidintervallet [1, 2, '...', 7, 8, 9, 10, 11, 12, 13, '...', 49, 50] om den aktuella sidan är 10 och det finns 50 sidor. Detta resulterar i sidorna 7, 8 och 9 till vänster om och 11, 12 och 13 till höger om den aktuella sidan samt sidorna 1 och 2 i början och 49 och 50 i slutet.

Utlöser InvalidPage om det angivna sidnumret inte existerar.

AttributLink to this heading

Paginator.ELLIPSISLink to this definition

En översättningsbar sträng som används som ersättning för sidnummer i sidintervallet som returneras av get_elided_page_range(). Standard är ...'.

Paginator.countLink to this definition

Det totala antalet objekt på alla sidor.

Paginator.num_pagesLink to this definition

Det totala antalet sidor.

Paginator.page_rangeLink to this definition

En 1-baserad intervalliterator för sidnummer, som t.ex. ger [1, 2, 3, 4].

klass PageLink to this heading

Du konstruerar vanligtvis inte Page-objekt för hand - du får dem genom att iterera Paginator, eller genom att använda Paginator.page().

class Page(object_list, number, paginator)Link to this definition

En sida fungerar som en sekvens av Page.object_list när man använder len() eller itererar den direkt.

MetoderLink to this heading

Page.has_next()Link to this definition

Returnerar True om det finns en nästa sida.

Page.has_previous()Link to this definition

Returnerar True om det finns en föregående sida.

Page.has_other_pages()Link to this definition

Returnerar True om det finns en nästa eller föregående sida.

Page.next_page_number()Link to this definition

Returnerar nästa sidnummer. Utlöser InvalidPage om nästa sida inte finns.

Page.previous_page_number()Link to this definition

Returnerar föregående sidnummer. Utlöser InvalidPage om föregående sida inte finns.

Page.start_index()Link to this definition

Returnerar det 1-baserade indexet för det första objektet på sidan, i förhållande till alla objekt i paginatorns lista. Till exempel:, vid paginering av en lista med 5 objekt med 2 objekt per sida, skulle den andra sidans start_index() returnera 3.

Page.end_index()Link to this definition

Returnerar det 1-baserade indexet för det sista objektet på sidan, i förhållande till alla objekt i paginatorns lista. Till exempel:, vid paginering av en lista med 5 objekt med 2 objekt per sida, skulle den andra sidans end_index() returnera 4.

AttributLink to this heading

Page.object_listLink to this definition

Listan över objekt på den här sidan.

Page.numberLink to this definition

Det 1-baserade sidnumret för den här sidan.

Page.paginatorLink to this definition

Det associerade Paginator-objektet.

UndantagLink to this heading

exception InvalidPageLink to this definition

En basklass för undantag som uppstår när en paginator får ett ogiltigt sidnummer.

Metoden Paginator.page() ger upphov till ett undantag om den begärda sidan är ogiltig (dvs. inte ett heltal) eller inte innehåller några objekt. I allmänhet räcker det med att fånga undantaget InvalidPage, men om du vill ha mer detaljerad information kan du fånga något av följande undantag:

exception PageNotAnIntegerLink to this definition

Uppstår när page() ges ett värde som inte är ett heltal.

exception EmptyPageLink to this definition

Utlöses när page() ges ett giltigt värde men inga objekt finns på den sidan.

Båda undantagen är subklasser av InvalidPage, så du kan hantera dem båda med except InvalidPage.