Django在Firefox和IE9中POST数据问题,但在Chrome正常

1 投票
1 回答
1039 浏览
提问于 2025-04-16 20:01

我正在用Django创建一个网站,当我在Firefox和IE9中尝试提交一个表单(输入框的名字是'bsubmit')的POST数据时,出现了以下错误:

"在'<'QueryDict: {u'bsubmit.y': [u'63'], u'bsubmit.x': [u'81'], u'csrfmiddlewaretoken':[u'bunchofnumbers']}>'中找不到键'bsubmit'"

在Chrome中这个没问题,所以我不太确定是什么原因。我在视图中是这样处理的:

def my_view(request):
    if request.method == 'POST':
        bsubmit = request.POST['bsubmit']
        return render_to_response('my_template.html', {'bsubmit': bsubmit},
                                  context_instance=RequestContext(request))
    else:
        bsubmit = 'some_val'
        return render_to_response('my_template.html', {'bsubmit': bsubmit},
                                  context_instance=RequestContext(request))

我觉得我一定遗漏了什么明显的东西,但我不知道是什么。

编辑:这是模板...

<form action="/home/" method="post"> 
{% csrf_token %}
<input type="image" src="submit.jpg" id="value1" name="bsubmit" value="value1"/>
</form>

我最开始有多个提交按钮,但即使只用一个,问题还是存在。

1 个回答

1

你在用JavaScript处理提交按钮吗?请求中出现的'bsubmit.x'和'bsubmit.y'这两个东西本身就很奇怪。

除此之外,你到底是用'bsubmit'来干嘛呢?

一般来说,你不应该直接访问POST变量。可以用这个来代替:

bsubmit = request.POST.get('bsubmit') # defaults to `None`

-- 或者 --

bsubmit = request.POST.get('bsubmit', 'default')

这样可以避免错误,所以你只需要在你的模板中适当地处理一下。

撰写回答