我似乎无法将此示例打印为“您没有提交任何内容!”。 每次我提交一份空表格时都会说:
您提交了: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>
答案 0 :(得分:32)
调用/search/
会导致“您没有提交任何内容”,但另一方面调用/search/?q=
会导致“您提交了你”'
浏览器必须添加q=
,即使它是空的,因为它们必须包含作为表单一部分的所有字段。只有在Javascript中执行某些DOM操作(或自定义javascript提交操作)时,您才会遇到此类行为,但前提是用户启用了javascript。所以你应该简单地测试非空字符串,例如:
if request.GET.get('q'):
message = 'You submitted: %r' % request.GET['q']
else:
message = 'You submitted nothing!'
答案 1 :(得分:14)
q = request.GET.get("q", None)
if q:
message = 'q= %s' % q
else:
message = 'Empty'
答案 2 :(得分:2)
因为你的表单有一个名为'q'的字段,所以将其留空仍然会发送一个空字符串。
试
if 'q' in request.GET and request.GET['q'] != "" :
message
else
error message
答案 3 :(得分:2)
在python中,None,0,“”(空字符串),False都被接受无。
所以:
if request.GET['q']: // true if q contains anything but not ""
message
else : //// since this returns "" ant this is equals to None
error
答案 4 :(得分:1)
这是一个很好的方法。
from django.utils.datastructures import MultiValueDictKeyError
try:
message = 'You submitted: %r' % request.GET['q']
except MultiValueDictKeyError:
message = 'You submitted nothing!'
如果q在GET请求中,则无需再次检查。 QueryDict中的调用。获取已经对您有所帮助。
答案 5 :(得分:1)
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/
答案 6 :(得分:0)
def search(request):
if 'q' in request.GET.keys():
message = 'You submitted: %r' % request.GET['q']
else:
message = 'You submitted nothing!'
return HttpResponse(message)
你也可以使用if ....
答案 7 :(得分:0)
msg = request.GET.get('q','default')
if (msg == default):
message = "YOU SUBMITTED NOTHING"
else:
message = "you submitted = %s" %msg"
return HttpResponse(message);