#python #django #pagination
#python #django #разбивка на страницы
Вопрос:
Я выполняю простой поиск с помощью Django и использую встроенную разбивку на страницы для разбиения результатов на страницы, и я получаю эту ошибку, когда нажимаю next, чтобы просмотреть результаты следующей страницы, аргумент int () должен быть строкой, байтоподобным объектом или числом, а не ‘NoneType’ Я не знаю, что это вызывает, вот код, q — строка запроса
def result(request):
try:
q = request.GET.get('q')
orders = Order.objects.filter(Q(flat_number=int(q)) | Q(customer_contact=int(q)))
paginator = Paginator(orders, 10) # Show 25 contacts per page
page = request.GET.get('page')
orders = paginator.get_page(page)
context['orders'] = orders
return render(request, 'main/results.html',context)
except Exception as e:
print('error is ', e)
return HttpResponse(str(e))
Комментарии:
1. Не могли бы вы показать пример запроса, который вы делаете, т. Е. Полный URL, который вы посещаете, чтобы столкнуться с этой проблемой?
Ответ №1:
В request.GET.get('q')
он вернет None, если q не передается как parm в вызове get.
Изменение его на request.GET['q']
вызовет исключение, если q не передан
Комментарии:
1. Спасибо за ваш ответ, Мэтьюз, я изменил его на запрос. ПОЛУЧАЕМ[‘q’], но он вызывает и MultiValueDictKeyError в /result/ ‘q’
Ответ №2:
Вот пример того, как работать с модулем разбиения на страницы, для пустых страниц и т.д.
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
def post_list(request): #list items
queryset_list = Post.objects.all() #.order_by("-timestamp")
query = request.GET.get("q")
if query:
queryset_list = queryset_list.filter(
Q(title__icontains=query) |
Q(content__icontains=query)
).distinct()
paginator = Paginator(queryset_list, 10) # Show 25 contacts per page
page_request_var = "page"
page = request.GET.get(page_request_var)
try:
queryset = paginator.page(page)
except PageNotAnInteger:
# If page is not an integer, deliver first page.
queryset = paginator.page(1)
except EmptyPage:
# If page is out of range (e.g. 9999), deliver last page of results.
queryset = paginator.page(paginator.num_pages)
context = {
"object_list": queryset,
"title": "Building stuff with code",
"page_request_var" : page_request_var
}
return render(request, "post_list.html", context)
Ответ №3:
попробуйте сделать это следующим образом
def result(request):
try:
q = request.GET.get('q')
orders = Order.objects.filter(Q(flat_number=int(q)) |
Q(customer_contact=int(q)))
paginator = Paginator(orders, 10) # Show 25 contacts per page
page = request.GET.get('page')
try:
pots = paginator.page(page)
except PageNotAnInteger:
posts = paginador.page(1)
except EmptyPage:
posts = paginador.page(1)
context['orders'] = post
return render(request, 'main/results.html',context)
except Exception as e:
print('error is ', e)
return HttpResponse(str(e))