Spec-Zone.ru › Django 3.0

Разделитель страниц

Django предоставляет несколько классов, которые помогают управлять данными, разделенными на несколько страниц, с ссылками «Предыдущая/Следующая». Эти классы находятся в django/core/paginator.py.

Paginator класс

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

Обязательно. Список, кортеж, QuerySet, или другой срезочный объект с методом count() или __len__(). Для согласованной постраничной навигации объекты должны быть упорядочены, например, с помощью условия order_by() или с помощью значения по умолчанию ordering в модели.

Проблемы производительности при постраничном отображении больших QuerySet

Если вы используете QuerySet с очень большим количеством элементов, запрос высоких номеров страниц может быть медленным в некоторых базах данных, потому что результирующий запрос LIMIT/OFFSET должен подсчитать количество записей OFFSET, что занимает больше времени по мере увеличения номера страницы.

Paginator.per_page

Обязательно. Максимальное количество элементов на странице, не включая «сирот» (см. необязательный аргумент orphans ниже).

Paginator.orphans

Необязательно. Используйте, когда вы не хотите иметь последнюю страницу с очень малым количеством элементов. Если последняя страница обычно содержит количество элементов меньше или равно orphans, эти элементы будут добавлены к предыдущей странице (которая станет последней) вместо того, чтобы оставлять их на отдельной странице. Например, с 23 элементами, per_page=10, и orphans=3, будет две страницы: первая страница с 10 элементами, а вторая (последняя) страница с 13 элементами. orphans по умолчанию равен нулю, что означает, что страницы никогда не объединяются, и последняя страница может содержать один элемент.

Paginator.allow_empty_first_page

Необязательно. Разрешено ли пустая первая страница. Если False и object_list пусто, будет поднято исключение EmptyPage.

Методы

Paginator.get_page(number) [source]

Возвращает объект Page с заданным индексом (1-основанным), обрабатывая при этом вне диапазона и недопустимые номера страниц.

Если страница не является числом, возвращается первая страница. Если номер страницы отрицательный или больше, чем количество страниц, возвращается последняя страница.

Возбуждает исключение EmptyPage только если вы указали Paginator(..., allow_empty_first_page=False) и object_list пуста.

Paginator.page(number) [source]

Возвращает объект Page с заданным индексом (1-основанным). Возбуждает исключение InvalidPage, если заданный номер страницы не существует.

Атрибуты

Paginator.count

Общее количество объектов на всех страницах.

Примечание

При определении количества объектов, содержащихся в object_list, Paginator сначала попытается вызвать object_list.count(). Если object_list не имеет метода count(), тогда Paginator вернется к использованию len(object_list). Это позволяет объектам, таким как QuerySet, использовать более эффективный метод count() при его наличии.

Paginator.num_pages

Общее количество страниц.

Paginator.page_range

Итератор диапазона номеров страниц (1-основанный), например, возвращает [1, 2, 3, 4].

Page класс

Обычно вы не создаете объекты Page вручную – вы получаете их с помощью Paginator.page().

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

Страница ведет себя как последовательность Page.object_list при использовании len() или при прямом итерировании.

Методы

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-основанный индекс первого объекта на странице, относительно всех объектов в списке разделителя страниц. Например, при постраничном отображении списка из 5 объектов с 2 объектами на странице, start_index() второй страницы вернет 3.

Page.end_index() [source]

Возвращает 1-основанный индекс последнего объекта на странице, относительно всех объектов в списке разделителя страниц. Например, при постраничном отображении списка из 5 объектов с 2 объектами на странице, end_index() второй страницы вернет 4.

Атрибуты

Page.object_list

Список объектов на этой странице.

Page.number

Номер страницы (1-основанный) для этой страницы.

Page.paginator

Соответствующий объект Paginator.

Исключения

exception InvalidPage [source]

Базовый класс исключений, возбуждаемых, когда разделителю страниц передается недопустимый номер страницы.

Метод Paginator.page() вызывает исключение, если запрошенная страница недействительна (то есть не является целым числом) или не содержит объектов. Обычно достаточно перехватить исключение InvalidPage, но если вам нужна более подробная информация, вы можете перехватить любое из следующих исключений:

exception PageNotAnInteger [source]

Вызывается, когда page() получает значение, которое не является целым числом.

exception EmptyPage [source]

Вызывается, когда page() получает допустимое значение, но на этой странице нет объектов.

Оба исключения являются подклассами InvalidPage, поэтому вы можете обработать их оба с помощью except InvalidPage.

© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/3.0/ref/paginator/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API