web-dev-qa-db-ja.com

Django request.GET

このサンプルを「You Submit Nothing!」と印刷することはできないようです。空のフォームを送信するたびに次のように表示されます。

送信した: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>
19
MacPython

/search/を呼び出すと、「あなたは何も送信しませんでした」が、一方で/search/?q=を呼び出すと、「あなたが送信した」となるはずです

ブラウザは、フォームの一部であるすべてのフィールドを含める必要があるため、空であってもq=を追加する必要があります。 Javascript(またはカスタムjavascript送信アクション)でDOM操作を行う場合のみ、ユーザーがjavascriptを有効にしている場合にのみ、このような動作が発生する可能性があります。したがって、おそらく空でない文字列をテストする必要があります、例えば:

if request.GET.get('q'):
    message = 'You submitted: %r' % request.GET['q']
else:
    message = 'You submitted nothing!'
33
tux21b
q = request.GET.get("q", None)
if q:
    message = 'q= %s' % q
else:
    message = 'Empty'
14
Davor Lucic

フォームには「q」というフィールドがあるため、空のままにすると空の文字列が送信されます。

試してみる

if 'q' in request.GET and request.GET['q'] != "" :
     message
else
     error message
2
second

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
FallenAngel

ここにそれを行う良い方法があります。

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

QがGET要求に含まれているかどうかを再度確認する必要はありません。 QueryDict .getの呼び出しは、すでにそれを実行しています。

1
joaonrb
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
Halit Yurttaş
def search(request):
if 'q' in request.GET.keys():
    message = 'You submitted: %r' % request.GET['q']
else:
    message = 'You submitted nothing!'

return HttpResponse(message)

...でも使用できます。

0
7i11