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/