Пагинация

from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger

def post_list(request):
    object_list = Post.objects.all()

    # 3 сообщения на страницу
    paginator = Paginator(object_list, 3)
    page = request.GET.get('page')
    try:
        posts = paginator.page(page)
    except PageNotAnInteger:
        posts = paginator.page(1)
    except EmptyPage:
        posts = paginator.page(paginator.num_pages)
    return render(
        request,
        'posts.html',
        {
            'page': page,
            'posts': posts,
        },
    )
<div class="pagination">
    <span class="step-links">
        {% if page.has_previous %}
            <a href="?page={{ page.previous_page_number }}">Previous</a>
        {% endif %}
            <span class="current">
                Page {{ page.number }} of {{ page.paginator.num_pages }}.
            </span>
        {% if page.has_next %}
            <a href="?page={{ page.next_page_number }}">Next</a>
        {% endif %}
    </span>
</div>

Paginator

class django.core.paginator.Paginator
  • orphans - минимальное количество позиции, допустимое на последней странице.
  • allow_empty_first_page - по умолчанию False, что вызовет исключение если список элементов пуст. Если True - ошибки не будет.
paginator = Paginator(queryset, 3)
count

Общее количесвто элементов в списке

num_pages

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

page_range

Возвращает список, содержащий номера полученных страниц

paginator.page_range
# [1, 2, 3, ...]
page(page_number)

Возвращает объект django.core.paginator.Page, указанную страницу из списка.

Возбуждает исключения:

Page

class django.core.paginator.Page

Объект, представляет страницу из пагинации

number

Номер текущей страницы

paginator

Возвращает django.core.paginator.Paginator, которым была создана данная страница

end_index()

Возвращает номер последней позиции

has_next()

Возвращает булево, это не последняя страница

has_other_pages()

Возвращает булево, это не единственная страница

has_previous()

Возвращает булево, это не первая страница

next_page_number()

Возвращает номер следующей страницы

Возбуждает исключение django.core.paginator.InvalidPage если это последняя страница

previous_page_number()

Возвращает номер предыдущей страницы

Возбуждает исключение django.core.paginator.InvalidPage если это первая страница

start_index()

Возвращает индекс первой страницы

InvalidPage

class django.core.paginator.InvalidPage

Исключение возникает, если номер задан некорректно

PageNotAnInteger

class django.core.paginator.PageNotAnInteger

Исключение возникает, если номер задан некорректно

Наследник django.core.paginator.InvalidPage

EmptyPage

class django.core.paginator.EmptyPage

Исключение возникает, если обращение к несуществующей странице

Наследник django.core.paginator.InvalidPage