Отправка пустой формы и странный вывод - PullRequest
1 голос
/ 25 апреля 2011

Вот моя форма:

<form action = "/search/" method = "get">
    <input type = "text" name = "q">
    <input type = "submit" value = "Search">
</form>

А вот мое мнение:

def search(request):
    if 'q' in request.GET:
        message = 'You searched for: %r' % request.GET['q']
    else:
        message = 'You submitted an empty form :('
    return HttpResponse(message)

Когда я пытаюсь что-то ввести, все работает нормально, кроме странных вещей. Например, когда я вхожу в asdasda, я получаю вывод You searched for: u'asdsa'. Другая проблема заключается в том, что когда я отправляю пустую форму, вывод просто u'', когда должно быть «Вы отправили пустую форму :(». Я читаю «Книгу Django», версию 1.xx, и это было пример ..

Ответы [ 4 ]

3 голосов
/ 25 апреля 2011

"Странная вещь" - это строка в юникоде. Вы можете прочитать об этом здесь: http://docs.python.org/tutorial/introduction.html#unicode-strings

И я предполагаю, что с тех пор, как пользователь нажал "отправить", вы получите запрос с пустым значением q (u ''), поскольку пользователь ничего не вводил. Это имеет смысл, верно? Вы должны изменить свой оператор if, чтобы проверить эту пустую строку в юникоде.

2 голосов
/ 25 апреля 2011

Для первой проблемы попробуйте использовать %s вместо %r.То, что вы делаете, это «необработанное» форматирование, которое, когда строка является Unicode, говорит вам об этом.Обычное форматирование строки просто копирует значение без 'u' или кавычек.

Для второй проблемы при вводе текста всегда будет ключ в словаре.Вместо выражения if попробуйте:

if request.GET['q'] != "":

, чтобы проверить, является ли строка пустой.

1 голос
/ 26 апреля 2011

Странный u связан с %r, который вызывает repr - вместо него используйте %s.

>>>'%r' % u'foo'
[out] "u'foo'"

>>>'%s' % u'foo'
[out] u'foo'
1 голос
/ 25 апреля 2011

'q' присутствует в словаре request.GET после отправки формы, в этом случае он просто оказывается пустым.Попробуйте это, чтобы показать сообщение об ошибке при отправке пустого запроса:

if 'q' in request.GET and request.GET['q'] != '':
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...