РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
685 of 818 menu

Класс Paginator

Класс Paginator применяется к QuerySet или списку объектов и возвращает объект пагинатора, который позволяет разбить данные на страницы с заданным количеством записей на каждой. Основные параметры конструктора: object_list - набор данных для разбиения (QuerySet, список или любой итерируемый объект), per_page - количество записей на странице. Дополнительные параметры: orphans - минимальное количество записей на последней странице (если записей меньше, они добавляются к предыдущей странице), allow_empty_first_page - разрешить или запретить пустую первую страницу. Пагинатор не выполняет запрос к базе данных до тех пор, пока не будет запрошена конкретная страница.

Синтаксис

from django.core.paginator import Paginator paginator = Paginator(object_list, per_page, orphans=0, allow_empty_first_page=True)

Пример

Давайте создадим пагинатор для списка статей, выводя по 10 записей на странице:

from myapp.models import Article from django.core.paginator import Paginator articles = Article.objects.all() paginator = Paginator(articles, 10) print(paginator.count) print(paginator.num_pages) print(paginator.page_range)

Результат выполнения кода:

"25" "3" "range(1, 4)"

В примере видно, что всего 25 записей, которые разбиты на 3 страницы (на последней странице 5 записей).

Атрибуты класса Paginator

Класс Paginator предоставляет несколько полезных атрибутов:

from myapp.models import Article from django.core.paginator import Paginator articles = Article.objects.all() paginator = Paginator(articles, 10) # Общее количество записей print(paginator.count) # Общее количество страниц print(paginator.num_pages) # Диапазон номеров страниц print(paginator.page_range)

Результат выполнения кода:

"25" "3" "range(1, 4)"

Пример

Давайте получим конкретную страницу и выведем её объекты:

from myapp.models import Article from django.core.paginator import Paginator articles = Article.objects.all() paginator = Paginator(articles, 10) page_obj = paginator.page(2) for article in page_obj.object_list: print(article.title)

Результат выполнения кода:

"article 11" "article 12" "article 13" "article 14" "article 15" "article 16" "article 17" "article 18" "article 19" "article 20"

Параметр orphans

Параметр orphans позволяет объединить последнюю страницу с предыдущей, если на ней слишком мало записей:

from myapp.models import Article from django.core.paginator import Paginator # Если на последней странице меньше 5 записей, # они будут добавлены к предыдущей странице articles = Article.objects.all() paginator = Paginator(articles, 10, orphans=5) print(paginator.count) print(paginator.num_pages)

Результат выполнения кода:

"25" "2"

В этом примере 25 записей разбиты на 2 страницы, так как на последней странице было бы 5 записей, что равно значению orphans.

Пример

Давайте обработаем исключение при запросе несуществующей страницы:

from myapp.models import Article from django.core.paginator import Paginator, EmptyPage articles = Article.objects.all() paginator = Paginator(articles, 10) try: page_obj = paginator.page(10) except EmptyPage: print("Page does not exist")

Результат выполнения кода:

"Page does not exist"

Смотрите также

  • класс Page,
    который представляет отдельную страницу с данными
  • атрибут count,
    который возвращает общее количество записей
  • атрибут num_pages,
    который возвращает общее количество страниц
  • атрибут page_range,
    который возвращает диапазон номеров страниц
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить