Джанго запрос. ПОЛУЧИТЬ - PullRequest
       7

Джанго запрос. ПОЛУЧИТЬ

19 голосов
/ 17 августа 2010

Кажется, я не могу напечатать этот пример "Вы ничего не отправили!". Каждый раз, когда я отправляю пустую форму, она говорит:

Вы отправили: 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>

Ответы [ 7 ]

32 голосов
/ 17 августа 2010

Вызов /search/ должен привести к "вы ничего не отправили", но, с другой стороны, вызов /search/?q= должен привести к "вы отправили" "

Браузеры должны добавить q=когда он пуст, потому что они должны включать все поля, которые являются частью формы.Только если вы выполняете некоторые манипуляции с DOM в Javascript (или настраиваете действие отправки javascript), вы можете получить такое поведение, но только если у пользователя включен javascript.Поэтому вам, вероятно, следует просто проверить наличие непустых строк, например:

if request.GET.get('q'):
    message = 'You submitted: %r' % request.GET['q']
else:
    message = 'You submitted nothing!'
14 голосов
/ 17 августа 2010
q = request.GET.get("q", None)
if q:
    message = 'q= %s' % q
else:
    message = 'Empty'
2 голосов
/ 17 августа 2010

В 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
2 голосов
/ 17 августа 2010

, так как ваша форма имеет поле с именем 'q', оставляя его пустым, все равно отправляется пустая строка.

1 голос
/ 08 декабря 2015
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 метод __contains__.Смотри https://docs.djangoproject.com/en/1.9/ref/request-response/

1 голос
/ 11 февраля 2014

Вот хороший способ сделать это.

from django.utils.datastructures import MultiValueDictKeyError
try:
    message = 'You submitted: %r' % request.GET['q']
except MultiValueDictKeyError:
    message = 'You submitted nothing!'

Вам не нужно снова проверять, есть ли q в GET-запросе. Вызов в QueryDict. get уже делает это для вас.

0 голосов
/ 07 июня 2014
def search(request):
if 'q' in request.GET.keys():
    message = 'You submitted: %r' % request.GET['q']
else:
    message = 'You submitted nothing!'

return HttpResponse(message)

вы можете использовать, если ... в тоже.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...