Метод previous_page_number
Метод previous_page_number применяется к объекту Page и возвращает номер предыдущей страницы относительно текущей. Этот метод полезен при построении навигации по страницам, когда необходимо отобразить ссылку на предыдущую страницу или выполнить какие-либо действия с данными предыдущей страницы. Метод не принимает аргументов и возвращает целое число.
Синтаксис
page.previous_page_number()
Пример
Рассмотрим базовый пример использования метода previous_page_number для получения номера предыдущей страницы:
from 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)
Результат выполнения кода:
"2"
Пример
Используем метод previous_page_number в шаблоне для построения навигации. Сначала подготовим данные в представлении:
from 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 для создания ссылки на предыдущую страницу:
{% 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 для проверки перед вызовом:
from 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")
Результат выполнения кода:
"No previous page exists"
Пример
Используем метод previous_page_number вместе с другими методами для построения полной навигации с информацией о соседних страницах:
from 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)
Результат выполнения кода:
"{'current': 5, 'total': 10, 'previous': 4, 'next': 6, 'has_prev': True, 'has_next': True}"
Смотрите также
-
метод
has_previous,
который проверяет наличие предыдущей страницы -
метод
next_page_number,
который возвращает номер следующей страницы -
метод
number,
который возвращает номер текущей страницы -
метод
has_other_pages,
который проверяет наличие других страниц кроме текущей