提交空表单和奇怪的输出

时间:2011-04-25 15:22:01

标签: python django forms

这是我的表格:

<form action = "/search/" method = "get">
    <input type = "text" name = "q">
    <input type = "submit" value = "Search">
</form>

这是我的观点:

def search(request):
    if 'q' in request.GET:
        message = 'You searched for: %r' % request.GET['q']
    else:
        message = 'You submitted an empty form :('
    return HttpResponse(message)

当我尝试输入一些东西时,一切正常,除了奇怪的你的东西。例如,当我输入asdasda时,我得到输出You searched for: u'asdsa'。另一个问题是,当我提交一个空表单时,输出只是u'',当它应该是“你提交了一个空表单:(”。我正在阅读“The Django Book”,1.xx版本和这是一个例子..

4 个答案:

答案 0 :(得分:3)

“怪异的东西”是一个unicode字符串。您可以在此处阅读:http://docs.python.org/tutorial/introduction.html#unicode-strings

我猜测,因为用户按下了提交,你得到一个空q值(u'')的请求,因为用户没有输入任何东西。这是有道理的,对吗?您应该更改if语句以检查此空unicode字符串。

答案 1 :(得分:2)

对于第一个问题,请尝试使用%s代替%r。你正在做的是'原始'格式化,当字符串是unicode时,它会告诉你。正常的字符串格式化只会复制没有“u”或引号的值。

对于第二个问题,文本输入将始终具有字典中的键。不要使用if语句,请尝试:

if request.GET['q'] != "":

测试字符串是否为空。

答案 2 :(得分:1)

提交表单后,request.GET字典中存在

'q',在这种情况下恰好是空的。试试这个,在提交空查询时显示错误消息:

if 'q' in request.GET and request.GET['q'] != '':

答案 3 :(得分:1)

奇怪的u归因于调用%r的{​​{1}} - 使用repr

%s