Встречается на 1% собеседований по Python

Как устроена пагинация в Django

В Django пагинация реализуется через класс Paginator из модуля django.core.paginator. Основные шаги:

  1. Создаем объект Paginator, передавая QuerySet и количество элементов на страницу:
python
from django.core.paginator import Paginator

queryset = MyModel.objects.all()
paginator = Paginator(queryset, 25)  # 25 элементов на страницу
  1. Получаем нужную страницу по номеру:
python
page_number = request.GET.get('page')
page_obj = paginator.get_page(page_number)
  1. В шаблоне используем методы page_obj:
html
{% for item in page_obj %}
  {{ item }}
{% endfor %}

<div class="pagination">
  {% if page_obj.has_previous %}
    <a href="?page={{ page_obj.previous_page_number }}">Назад</a>
  {% endif %}
  <span>Страница {{ page_obj.number }} из {{ page_obj.paginator.num_pages }}</span>
  {% if page_obj.has_next %}
    <a href="?page={{ page_obj.next_page_number }}">Вперед</a>
  {% endif %}
</div>

Ключевые особенности:

  • Автоматически обрабатывает невалидные номера страниц
  • Поддерживает методы has_previous(), has_next(), previous_page_number(), next_page_number()
  • Можно настроить параметр GET (по умолчанию 'page')
  • Работает как с QuerySet, так и со списками
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы