It seems I can't make this example print "You submitted nothing!". Every time I submit an empty form it says:
You submitted: u''
instead of:
You submitted nothing!
Where did I go wrong?
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)
template:
<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>
Calling /search/
should result in "you submitted nothing", but calling /search/?q=
on the other hand should result in "you submitted u''"
Browsers have to add the q=
even when it's empty, because they have to include all fields which are part of the form. Only if you do some DOM manipulation in Javascript (or a custom javascript submit action), you might get such a behavior, but only if the user has javascript enabled. So you should probably simply test for non-empty strings, e.g:
if request.GET.get('q'):
message = 'You submitted: %r' % request.GET['q']
else:
message = 'You submitted nothing!'
msg = request.GET.get('q','default')
if (msg == default):
message = "YOU SUBMITTED NOTHING"
else:
message = "you submitted = %s" %msg"
return HttpResponse(message);
Here is a good way to do it.
from django.utils.datastructures import MultiValueDictKeyError
try:
message = 'You submitted: %r' % request.GET['q']
except MultiValueDictKeyError:
message = 'You submitted nothing!'
You don't need to check again if q is in GET request. The call in the QueryDict.get already does that to you.
since your form has a field called 'q', leaving it blank still sends an empty string.
try
if 'q' in request.GET and request.GET['q'] != "" :
message
else
error message
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)
Use this way, django offical document recommended __contains__ method. See 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)
you can use if ... in too.
In python, None, 0, ""(empty string), False are all accepted None.
So:
if request.GET['q']: // true if q contains anything but not ""
message
else : //// since this returns "" ant this is equals to None
error
q = request.GET.get("q", None)
if q:
message = 'q= %s' % q
else:
message = 'Empty'
Source: Stackoverflow.com