Атрибут number
Атрибут number класса Page возвращает номер текущей страницы в пагинаторе. Нумерация страниц начинается с 1, поэтому первая страница всегда имеет номер 1. Этот атрибут полезен для отображения текущего номера страницы в интерфейсе, построения навигационных элементов или для проверки, какая страница сейчас активна.
Синтаксис
page.number
Атрибут доступен только для чтения. Попытка присвоить ему новое значение вызовет ошибку AttributeError.
Пример
Получим номер текущей страницы в представлении:
from django.core.paginator import Paginator
from myapp.models import Article
from django.shortcuts import render
def article_list(request):
articles = Article.objects.all().order_by('id')
paginator = Paginator(articles, 10)
page_number = request.GET.get('page')
page = paginator.get_page(page_number)
print(page.number) # Выведет номер текущей страницы
return render(request, 'articles.html', {'page': page})
Результат выполнения кода при открытии второй страницы:
"2"
Пример
Используем атрибут number для построения навигации в шаблоне:
<div class="pagination">
<span>Страница {{ page.number }} из {{ page.paginator.num_pages }}</span>
{% if page.has_previous %}
<a href="?page={{ page.previous_page_number }}">Назад</a>
{% endif %}
<span>Текущая страница: {{ page.number }}</span>
{% if page.has_next %}
<a href="?page={{ page.next_page_number }}">Вперед</a>
{% endif %}
</div>
Пример
Используем атрибут number для условного отображения контента:
from django.core.paginator import Paginator
from myapp.models import Article
from django.shortcuts import render
def article_list(request):
articles = Article.objects.all().order_by('id')
paginator = Paginator(articles, 5)
page_number = request.GET.get('page')
page = paginator.get_page(page_number)
# Проверяем, первая ли это страница
if page.number == 1:
# Показываем специальный блок только на первой странице
featured_articles = Article.objects.filter(is_featured=True)[:3]
else:
featured_articles = []
return render(request, 'articles.html', {
'page': page,
'featured_articles': featured_articles
})
Смотрите также
-
класс
Paginator,
который создает объект пагинатора для разбивки набора данных на страницы -
атрибут
object_list,
который возвращает список объектов на текущей странице -
метод
has_next,
который проверяет наличие следующей страницы -
метод
previous_page_number,
который возвращает номер предыдущей страницы