Django request.GET

Mac*_*hon 19 django request

我似乎无法让这个例子打印出"你什么都没提交!".每次我提交一份空表格时都会说:

你提交了:你''

代替:

你什么都没提交!

我哪里做错了?

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)
Run Code Online (Sandbox Code Playgroud)

模板:

<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>
Run Code Online (Sandbox Code Playgroud)

tux*_*21b 34

打电话会/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!'
Run Code Online (Sandbox Code Playgroud)

  • 不,调用`dict.get(key,default = None)`将返回为密钥存储的值,否则返回默认值.在这种情况下,返回"None",并且"u"和"无"都评估为"False".因此,当您不希望抛出异常时,get()是一种有用的方法. (6认同)

Dav*_*cic 14

q = request.GET.get("q", None)
if q:
    message = 'q= %s' % q
else:
    message = 'Empty'
Run Code Online (Sandbox Code Playgroud)