---
title: "Paginator"
version: 5.2
locale: sv
source: https://docs.djangoproject.com/sv/5.2/ref/paginator/
canonical: https://djangodocs.dev/sv/5.2/ref/paginator/
---
# Paginator

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](https://github.com/django/django/blob/stable/5.2.x/django/core/paginator.py).

För exempel, se [Pagination topic guide](/sv/5.2/topics/pagination/).

## klassen `Paginator`

#### `class Paginator(object_list, per_page, orphans=0, allow_empty_first_page=True, error_messages=None)`

En paginator fungerar som en sekvens av [`Page`](#django.core.paginator.Page) när du använder `len()` eller itererar den direkt.

#### `Paginator.object_list`

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()`](/sv/5.2/ref/models/querysets/#django.db.models.query.QuerySet.order_by) klausul eller med en standard [`ordering`](/sv/5.2/ref/models/options/#django.db.models.Options.ordering) på modellen.

> **Prestandaproblem vid paginering av stora QuerySet**
>
> Om du använder en `QuerySet` med ett mycket stort antal objekt kan det gå långsamt att begära höga sidnummer i vissa databaser, eftersom den resulterande `LIMIT`/`OFFSET`-frågan måste räkna antalet `OFFSET`-poster, vilket tar längre tid när sidnumret blir högre.

#### `Paginator.per_page`

Obligatoriskt. Det maximala antalet objekt som ska inkluderas på en sida, exklusive föräldralösa barn (se det valfria argumentet [`orphans`](#django.core.paginator.Paginator.orphans) nedan).

#### `Paginator.orphans`

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_page`

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_messages`

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:

```pycon
>>> 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:

```pycon
>>> 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
```

### Metoder

#### `Paginator.get_page(number)`

Returnerar ett [`Page`](#django.core.paginator.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`](#django.core.paginator.EmptyPage)-undantag endast om du anger `Paginator(..., allow_empty_first_page=False)` och `object_list` är tom.

#### `Paginator.page(number)`

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

#### `Paginator.get_elided_page_range(number, * (Keyword-only parameters separator (PEP 3102)), on_each_side=3, on_ends=2)`

Returnerar en 1-baserad lista med sidnummer som liknar [`Paginator.page_range`](#django.core.paginator.Paginator.page_range), men kan lägga till en ellips på endera eller båda sidorna av det aktuella sidnumret om [`Paginator.num_pages`](#django.core.paginator.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`](#django.core.paginator.InvalidPage) om det angivna sidnumret inte existerar.

### Attribut

#### `Paginator.ELLIPSIS`

En översättningsbar sträng som används som ersättning för sidnummer i sidintervallet som returneras av [`get_elided_page_range()`](#django.core.paginator.Paginator.get_elided_page_range). Standard är `...'`.

#### `Paginator.count`

Det totala antalet objekt på alla sidor.

> **Note**
>
> När `Paginator` ska bestämma antalet objekt som finns i `object_list`, kommer `Paginator` först att försöka anropa `object_list.count()`. Om `object_list` inte har någon `count()` metod, så kommer `Paginator` att falla tillbaka till att använda `len(object_list)`. Detta gör att objekt, som `QuerySet`, kan använda en mer effektiv `count()` metod när den finns tillgänglig.

#### `Paginator.num_pages`

Det totala antalet sidor.

#### `Paginator.page_range`

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

## klass `Page`

Du konstruerar vanligtvis inte `Page`-objekt för hand - du får dem genom att iterera [`Paginator`](#django.core.paginator.Paginator), eller genom att använda [`Paginator.page()`](#django.core.paginator.Paginator.page).

#### `class Page(object_list, number, paginator)`

En sida fungerar som en sekvens av [`Page.object_list`](#django.core.paginator.Page.object_list) när man använder `len()` eller itererar den direkt.

### Metoder

#### `Page.has_next()`

Returnerar `True` om det finns en nästa sida.

#### `Page.has_previous()`

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

#### `Page.has_other_pages()`

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

#### `Page.next_page_number()`

Returnerar nästa sidnummer. Utlöser [`InvalidPage`](#django.core.paginator.InvalidPage) om nästa sida inte finns.

#### `Page.previous_page_number()`

Returnerar föregående sidnummer. Utlöser [`InvalidPage`](#django.core.paginator.InvalidPage) om föregående sida inte finns.

#### `Page.start_index()`

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()`](#django.core.paginator.Page.start_index) returnera `3`.

#### `Page.end_index()`

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()`](#django.core.paginator.Page.end_index) returnera `4`.

### Attribut

#### `Page.object_list`

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

#### `Page.number`

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

#### `Page.paginator`

Det associerade [`Paginator`](#django.core.paginator.Paginator)-objektet.

## Undantag

#### `exception InvalidPage`

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

Metoden [`Paginator.page()`](#django.core.paginator.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 PageNotAnInteger`

Uppstår när [`page()`](#django.core.paginator.Paginator.page) ges ett värde som inte är ett heltal.

#### `exception EmptyPage`

Utlöses när [`page()`](#django.core.paginator.Paginator.page) ges ett giltigt värde men inga objekt finns på den sidan.

Båda undantagen är subklasser av [`InvalidPage`](#django.core.paginator.InvalidPage), så du kan hantera dem båda med `except InvalidPage`.
