Метод previous_page_number

Метод previous_page_number применяется к объекту Page и возвращает номер предыдущей страницы относительно текущей. Этот метод полезен при построении навигации по страницам, когда необходимо отобразить ссылку на предыдущую страницу или выполнить какие-либо действия с данными предыдущей страницы. Метод не принимает аргументов и возвращает целое число.

Синтаксис

pythonpage.previous_page_number()

Пример

Рассмотрим базовый пример использования метода previous_page_number для получения номера предыдущей страницы:

pythonfrom django.core.paginator import Paginator
from myapp.models import Article

# Get all articles
articles = Article.objects.all()

# Create paginator with 10 items per page
paginator = Paginator(articles, 10)

# Get the third page
page = paginator.page(3)

# Get the number of the previous page
prev_page = page.previous_page_number()

# Print the result
print(prev_page)

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

python"2"

Пример

Используем метод previous_page_number в шаблоне для построения навигации. Сначала подготовим данные в представлении:

pythonfrom django.core.paginator import Paginator
from django.shortcuts import render
from myapp.models import Article

def article_list(request):
  # Get all articles
  articles = Article.objects.all()

  # Create paginator with 5 items per page
  paginator = Paginator(articles, 5)

  # Get the current page number from GET parameters
  page_number = request.GET.get('page', 1)

  # Get the page object
  page = paginator.page(page_number)

  # Pass the page object to the template
  return render(request, 'articles/list.html', {'page': page})

Затем используем метод в шаблоне list.html для создания ссылки на предыдущую страницу:

html{% if page.has_previous %}
  <a href="?page={{ page.previous_page_number }}">Previous</a>
{% else %}
  <span>Previous</span>
{% endif %}

<span>Page {{ page.number }} of {{ page.paginator.num_pages }}</span>

{% if page.has_next %}
  <a href="?page={{ page.next_page_number }}">Next</a>
{% else %}
  <span>Next</span>
{% endif %}

Пример

Важно обрабатывать ситуацию, когда текущая страница является первой. В этом случае метод previous_page_number выбрасывает исключение EmptyPage. Используйте метод has_previous для проверки перед вызовом:

pythonfrom django.core.paginator import Paginator, EmptyPage
from myapp.models import Article

# Get all articles
articles = Article.objects.all()

# Create paginator with 10 items per page
paginator = Paginator(articles, 10)

try:
  # Try to get the first page
  page = paginator.page(1)

  # This will raise an EmptyPage exception
  # because the first page has no previous page
  prev_page = page.previous_page_number()

  print(prev_page)
except EmptyPage:
  print("No previous page exists")

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

python"No previous page exists"

Пример

Используем метод previous_page_number вместе с другими методами для построения полной навигации с информацией о соседних страницах:

pythonfrom django.core.paginator import Paginator
from myapp.models import Article

# Get all articles
articles = Article.objects.all()

# Create paginator with 3 items per page
paginator = Paginator(articles, 3)

# Get the fifth page
page = paginator.page(5)

# Get information about the current page
current = page.number
total = page.paginator.num_pages

# Get previous and next page numbers
if page.has_previous():
  prev = page.previous_page_number()
else:
  prev = None

if page.has_next():
  next = page.next_page_number()
else:
  next = None

# Build navigation data
navigation = {
  'current': current,
  'total': total,
  'previous': prev,
  'next': next,
  'has_prev': page.has_previous(),
  'has_next': page.has_next(),
}

print(navigation)

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

python"{'current': 5, 'total': 10, 'previous': 4, 'next': 6, 'has_prev': True, 'has_next': True}"

Смотрите также

  • метод has_previous,
    который проверяет наличие предыдущей страницы
  • метод next_page_number,
    который возвращает номер следующей страницы
  • метод number,
    который возвращает номер текущей страницы
  • метод has_other_pages,
    который проверяет наличие других страниц кроме текущей