---
title: "Paginator"
version: 6.1
locale: sv
source: https://docs.djangoproject.com/sv/6.1/ref/paginator/
canonical: https://djangodocs.dev/sv/6.1/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/6.1.x/django/core/paginator.py).

För exempel, se [Pagination topic guide](/sv/6.1/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/6.1/ref/models/querysets/#django.db.models.query.QuerySet.order_by) klausul eller med en standard [`ordering`](/sv/6.1/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`

Optional. 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. `orphans` defaults to zero, which means
pages are never combined and the last page may have one item. `orphans`
should be less than the [`per_page`](#django.core.paginator.Paginator.per_page) value.

> **Deprecated since Django 6.0**
>
> Ersatt sedan version 6.0: Support for the `orphans` argument being larger than or equal to the
> `per_page` argument is deprecated.

#### `Paginator.allow_empty_first_page`

Optional. 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.

#### `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]`.

## `AsyncPaginator` class

> **New in Django 6.0**

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

Asynchronous version of [`Paginator`](#django.core.paginator.Paginator).

`AsyncPaginator` has the same attributes and signatures as
[`Paginator`](#django.core.paginator.Paginator), with the following exceptions:

- The attribute [`Paginator.count`](#django.core.paginator.Paginator.count) is supported as an asynchronous
  method `AsyncPaginator.acount()`.
- The attribute [`Paginator.num_pages`](#django.core.paginator.Paginator.num_pages) is supported as an
  asynchronous method `AsyncPaginator.anum_pages()`.
- The attribute [`Paginator.page_range`](#django.core.paginator.Paginator.page_range) is supported as an
  asynchronous method `AsyncPaginator.apage_range()`.

`AsyncPaginator` has asynchronous versions of the same methods as
[`Paginator`](#django.core.paginator.Paginator), using an `a` prefix - for example, use
`await async_paginator.aget_page(number)` rather than
`paginator.get_page(number)`.

## 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.

## `AsyncPage` class

> **New in Django 6.0**

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

Asynchronous version of [`Page`](#django.core.paginator.Page).

`AsyncPage` has the same attributes and signatures as [`Page`](#django.core.paginator.Page), as
well as asynchronous versions of all the same methods, using an `a`
prefix - for example, use `await async_page.ahas_next()` rather than
`page.has_next()`.

`AsyncPage` has the following additional method:

#### `aget_object_list()`

Returns `AsyncPage.object_list` as a list. This method must be
awaited before `AsyncPage` can be treated as a sequence of
`AsyncPage.object_list`.

## 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`.
