📝 Django

Пагинация в Django ListView

P
Автор
Pyland
📅
Опубликовано
30.06.2026
⏱️
Время чтения
1 мин
👁️
Просмотров
89
🌿
Уровень
Средний
🐦 💼 ✈️

Охватываемые темы: Включение пагинации, Шаблон с пагинацией, Пагинация с фильтрами, Ручная пагинация (в function-based views).

Включение пагинации

from django.views.generic import ListView
from .models import Task

class TaskListView(ListView):
    model = Task
    template_name = 'tasks/task_list.html'
    context_object_name = 'tasks'
    paginate_by = 20  # объектов на страницу
    ordering = ['-created_at']

Шаблон с пагинацией

{% for task in tasks %}
  <div>{{ task.title }}</div>
{% endfor %}

{% if is_paginated %}
<nav>
  {% 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 %}
</nav>
{% endif %}

Пагинация с фильтрами

<!-- Сохраняем GET-параметры при переходе по страницам -->
<a href="?{{ request.GET.urlencode }}&page={{ page_obj.next_page_number }}">Вперёд</a>

Ручная пагинация (в function-based views)

from django.core.paginator import Paginator

def task_list(request):
    tasks = Task.objects.all().order_by('-created_at')
    paginator = Paginator(tasks, 20)
    page_number = request.GET.get('page', 1)
    page_obj = paginator.get_page(page_number)

    return render(request, 'tasks/list.html', {'page_obj': page_obj})

Переменные контекста ListView

Переменная Значение
page_obj текущая страница
paginator объект пагинатора
is_paginated True если страниц > 1
object_list объекты текущей страницы

Ваша реакция на статью

💬 Комментарии (0)

🔐 Войдите в систему, чтобы оставить комментарий
🚪 Войти
💭

Комментариев пока нет

Станьте первым, кто поделится мнением об этой статье!

🔗 Похожие

Похожие статьи

Продолжите изучение с этими материалами

📝

pytest-django: тестирование Django

Охватываемые темы: Установка, @pytest.mark.djangodb, Фикстуры, Тестирование views.

📅 30.06.2026 👁️ 138
📝

Django: Теги шаблонов

Теги шаблонов — это логика внутри HTML. В отличие от {{ переменная }}, которая только...

📅 30.06.2026 👁️ 85
📝

Списки в HTML

Список — один из самых частых элементов разметки. Навигационное меню, теги поста, шаги инструкции, глоссарий...

📅 30.06.2026 👁️ 90

Понравилась статья?

Подпишитесь на наши обновления и получайте новые статьи первыми. Развивайтесь вместе с PyLand!