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

Атрибут object_list

Атрибут object_list класса Page содержит список объектов модели, которые принадлежат текущей странице пагинации. Этот атрибут доступен только для чтения и возвращает список объектов, полученных из QuerySet с учетом ограничений текущей страницы. Атрибут является основным способом доступа к данным на конкретной странице и часто используется в шаблонах для отображения содержимого страницы.

Синтаксис

page.object_list

Пример

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

from django.core.paginator import Paginator from myapp.models import Article # Get all articles articles = Article.objects.all() # Create paginator with 10 items per page paginator = Paginator(articles, 10) # Get first page page = paginator.page(1) # Get objects on this page page_objects = page.object_list for article in page_objects: print(article.title)

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

"article 1" "article 2" "article 3" "article 4" "article 5" "article 6" "article 7" "article 8" "article 9" "article 10"

Пример

Давайте используем атрибут object_list в шаблоне для отображения списка статей:

<!-- in template --> {% for article in page.object_list %} <h2>{{ article.title }}</h2> <p>{{ article.content }}</p> {% endfor %} <!-- pagination controls --> {% if page.has_previous %} <a href="?page={{ page.previous_page_number }}">Previous</a> {% endif %} Page {{ page.number }} of {{ page.paginator.num_pages }} {% if page.has_next %} <a href="?page={{ page.next_page_number }}">Next</a> {% endif %}

Пример

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

from django.core.paginator import Paginator from myapp.models import Article # Get all articles articles = Article.objects.all() # Create paginator with 5 items per page paginator = Paginator(articles, 5) # Get last page last_page = paginator.page(paginator.num_pages) # Get objects count on last page last_page_count = len(last_page.object_list) print(last_page_count)

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

"3"

где 3 - количество объектов на последней странице.

Пример

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

from django.core.paginator import Paginator, EmptyPage from myapp.models import Article class ArticlePaginator: def __init__(self, request, queryset, per_page=10): self.request = request self.paginator = Paginator(queryset, per_page) self.page_number = request.GET.get('page', 1) try: self.page = self.paginator.page(self.page_number) except EmptyPage: self.page = self.paginator.page(self.paginator.num_pages) def get_articles(self): return self.page.object_list def get_pagination_data(self): return { 'current_page': self.page.number, 'has_next': self.page.has_next(), 'has_previous': self.page.has_previous(), 'total_pages': self.paginator.num_pages, 'items_count': len(self.page.object_list) } # Usage example articles_qs = Article.objects.filter(status='published') paginator = ArticlePaginator(request, articles_qs, per_page=10) # Get articles for current page articles = paginator.get_articles() # Get pagination data pagination_data = paginator.get_pagination_data() print(pagination_data)

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

{"current_page": 1, "has_next": true, "has_previous": false, "total_pages": 5, "items_count": 10}

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

  • атрибут number,
    который возвращает номер текущей страницы
  • метод has_next,
    который проверяет наличие следующей страницы
  • метод has_previous,
    который проверяет наличие предыдущей страницы
  • атрибут paginator,
    который возвращает объект пагинатора для текущей страницы
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить