Атрибут number

Атрибут number класса Page возвращает номер текущей страницы в пагинаторе. Нумерация страниц начинается с 1, поэтому первая страница всегда имеет номер 1. Этот атрибут полезен для отображения текущего номера страницы в интерфейсе, построения навигационных элементов или для проверки, какая страница сейчас активна.

Синтаксис

pythonpage.number

Атрибут доступен только для чтения. Попытка присвоить ему новое значение вызовет ошибку AttributeError.

Пример

Получим номер текущей страницы в представлении:

pythonfrom 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})

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

python"2"

Пример

Используем атрибут number для построения навигации в шаблоне:

ninja<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 для условного отображения контента:

pythonfrom 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,
    который возвращает номер предыдущей страницы