Существует два метода доступа к страницам из объекта Paginator: "Paginator.get_page
" и "Paginator.page
". Где метод get_page
не вызывает никаких исключений, если данная страница не является числом, а Paginator.page
. Вы используете метод "get_page
", но перехватываете исключение PageNotAnInteger
, где это исключение вызывается только методом Paginator.page
.
Из Django документации
Paginator.get_page (number) -> Возвращает объект страницы с данным индексом на основе 1, а также обрабатывает недопустимые и недопустимые номера страниц .
Если страница не является числом, возвращается первая страница . Если номер страницы отрицательный или превышает количество страниц, возвращается последняя страница.
Вызывает исключение EmptyPage , только если вы указали Paginator (..., allow_empty_first_page = False) и список_объектов пуст.
Paginator.page (number) Возвращает объект Page с указанным индексом на основе 1. Вызывает InvalidPage, если заданный номер страницы не существует.
Possibility: Seems like page number you are getting via query string isn't a valid number
Чтобы сделать это явным, измените метод get_page с методом страницы
page = request.GET.get('page')
try:
pagination= paginator.page(page)
except PageNotAnInteger:
# If page is not an integer, deliver first page.
pagination = paginator.page(1)
except EmptyPage:
# If page is out of range (e.g. 9999), deliver last page of results.
pagination = paginator.page(paginator.num_pages)
context = {
'search': item,
'pagination': pagination,
'query': query,
}
return render(request, 'search_result.html', context)
Используйте вход на сервер или инструменты разработчика в браузере, чтобы проверить, хорошо ли идет номер страницы в строке запроса