Django request.GET

时间:2010-08-17 09:01:24

标签: django request

我似乎无法将此示例打印为“您没有提交任何内容!”。 每次我提交一份空表格时都会说:

您提交了: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>

8 个答案:

答案 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);