РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
498 of 818 menu

Исключение PageNotAnInteger

Исключение PageNotAnInteger выбрасывается модулем пагинации Django, когда в метод page передается значение, не являющееся целым числом. Это исключение наследуется от page/InvalidPage/">InvalidPage и предназначено для обработки случаев, когда параметр страницы в запросе не может быть преобразован в целое число. Обычно это происходит, когда пользователь передает в URL-параметре строку, содержащую буквы или другие нечисловые символы.

Синтаксис

from django.core.paginator import Paginator, PageNotAnInteger paginator = Paginator(object_list, per_page) try: page_obj = paginator.page(page_number) except PageNotAnInteger: # обрабатываем ошибку неверного типа page_obj = paginator.page(1)

Пример

Рассмотрим базовый пример обработки исключения в функции представления:

from django.core.paginator import Paginator, PageNotAnInteger, EmptyPage from django.shortcuts import render from myapp.models import Article def article_list(request): articles = Article.objects.all().order_by('-created_at') paginator = Paginator(articles, 10) # 10 статей на страницу page = request.GET.get('page', 1) try: articles_page = paginator.page(page) except PageNotAnInteger: # если page не целое число - показываем первую страницу articles_page = paginator.page(1) except EmptyPage: # если page выходит за пределы - показываем последнюю articles_page = paginator.page(paginator.num_pages) return render(request, 'articles/list.html', {'page_obj': articles_page})

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

"Возвращается страница с запрошенным номером"

Пример

Пример обработки исключения в классе-представлении с использованием mixin:

from django.core.paginator import Paginator, PageNotAnInteger, EmptyPage from django.views.generic import ListView from myapp.models import Article class ArticleListView(ListView): model = Article template_name = 'articles/list.html' context_object_name = 'articles' paginate_by = 20 def paginate_queryset(self, queryset, page_size): paginator = Paginator(queryset, page_size) page = self.request.GET.get('page') try: page_obj = paginator.page(page) except PageNotAnInteger: page_obj = paginator.page(1) except EmptyPage: page_obj = paginator.page(paginator.num_pages) return (paginator, page_obj, page_obj.object_list, page_obj.has_other_pages())

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

"Исключение перехвачено, возвращена первая страница"

Пример

Пример использования в шаблоне с выводом сообщения об ошибке:

from django.core.paginator import Paginator, PageNotAnInteger, EmptyPage from django.shortcuts import render from myapp.models import Category def category_list(request): categories = Category.objects.filter(is_active=True) paginator = Paginator(categories, 15) page = request.GET.get('page', 1) error_message = None try: categories_page = paginator.page(page) except PageNotAnInteger: categories_page = paginator.page(1) error_message = 'Некорректный номер страницы. Показана первая страница.' except EmptyPage: categories_page = paginator.page(paginator.num_pages) error_message = 'Страница не найдена. Показана последняя страница.' return render(request, 'categories/list.html', { 'page_obj': categories_page, 'error_message': error_message })

Результат выполнения кода при запросе с параметром page=abc:

"Некорректный номер страницы. Показана первая страница."

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

  • исключение EmptyPage,
    которое возникает при запросе несуществующей страницы
  • исключение InvalidPage,
    которое является базовым для ошибок пагинации
  • исключение Http404,
    которое используется для возврата ошибки 404
  • исключение DoesNotExist,
    которое возникает при отсутствии объекта в базе данных
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить