Django request.GET
Кажется, я не могу сделать этот пример печатным: "Вы ничего не подавали!".
Каждый раз, когда я отправляю пустую форму, она говорит:
Вы отправили: u ''
вместо:
Вы ничего не представили!
Где я ошибся?
views.py
def search(request):
if 'q' in request.GET:
message = 'You submitted: %r' % request.GET['q']
else:
message = 'You submitted nothing!'
return HttpResponse(message)
:
<html>
<head>
<title> Search </title>
</head>
<body>
<form action="/search/" method="get" >
<input type="text" name = "q">
<input type="submit"value="Search"/>
</form>
</body>
</html>
Ответы
Ответ 1
Вызов /search/
должен привести к "вы ничего не отправили", но с другой стороны вызов /search/?q=
должен привести к "вы отправили u" "
Браузеры должны добавить q=
, даже если он пуст, потому что они должны включать все поля, которые являются частью формы. Только если вы выполняете некоторые манипуляции с DOM в Javascript (или пользовательское действие отправки javascript), вы можете получить такое поведение, но только если у пользователя включен javascript. Поэтому вам, вероятно, нужно просто проверить непустые строки, например:
if request.GET.get('q'):
message = 'You submitted: %r' % request.GET['q']
else:
message = 'You submitted nothing!'
Ответ 2
q = request.GET.get("q", None)
if q:
message = 'q= %s' % q
else:
message = 'Empty'
Ответ 3
так как ваша форма имеет поле с именем "q", оставив его пустым, все равно отправляет пустую строку.
попробовать
if 'q' in request.GET and request.GET['q'] != "" :
message
else
error message
Ответ 4
В python None, 0, "" (пустая строка), False все приняты None.
Итак:
if request.GET['q']: // true if q contains anything but not ""
message
else : //// since this returns "" ant this is equals to None
error
Ответ 5
Вот хороший способ сделать это.
from django.utils.datastructures import MultiValueDictKeyError
try:
message = 'You submitted: %r' % request.GET['q']
except MultiValueDictKeyError:
message = 'You submitted nothing!'
Вам не нужно снова проверять, есть ли q в запросе GET. Вызов в QueryDict. get уже делает это для вас.
Ответ 6
def search(request):
if 'q' in request.GET.keys():
message = 'You submitted: %r' % request.GET['q']
else:
message = 'You submitted nothing!'
return HttpResponse(message)
вы можете использовать, если... тоже.
Ответ 7
from django.http import QueryDict
def search(request):
if request.GET.\__contains__("q"):
message = 'You submitted: %r' % request.GET['q']
else:
message = 'You submitted nothing!'
return HttpResponse(message)
Используйте этот способ, django offical document рекомендуется метод __contains__. См. https://docs.djangoproject.com/en/1.9/ref/request-response/