このサンプルを「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>
/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!'
q = request.GET.get("q", None)
if q:
message = 'q= %s' % q
else:
message = 'Empty'
フォームには「q」というフィールドがあるため、空のままにすると空の文字列が送信されます。
試してみる
if 'q' in request.GET and request.GET['q'] != "" :
message
else
error message
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
ここにそれを行う良い方法があります。
from Django.utils.datastructures import MultiValueDictKeyError
try:
message = 'You submitted: %r' % request.GET['q']
except MultiValueDictKeyError:
message = 'You submitted nothing!'
QがGET要求に含まれているかどうかを再度確認する必要はありません。 QueryDict .getの呼び出しは、すでにそれを実行しています。
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/ を参照してください。
def search(request):
if 'q' in request.GET.keys():
message = 'You submitted: %r' % request.GET['q']
else:
message = 'You submitted nothing!'
return HttpResponse(message)
...でも使用できます。