Django:传递AJAX POST数据时即使键存在也出现MultiValueDictKeyError
我的Ajax请求里有一些数据:
data: { hint: {'asdf':4} },
我觉得我应该可以用这个来访问这个对象:
request.POST['hint'] # and possibly request.POST['hint']['asdf'] to get 4
但是我遇到了这个错误。然后我查看了:
MultiValueDictKeyError at /post_url/
"'hint'"
当我打印出这些数据时,得到的字典格式很奇怪:
<QueryDict: {u'hint[asdf]': [u'4']}>
我应该怎么正确地传递这些数据,这样我在Python中也能保持和在JavaScript中一样的结构,照样使用呢?
1 个回答
11
首先,在你的 $.ajax
调用中,不要直接把所有的 POST 数据放进 data
属性里,而是把它放进一个叫 json_data
的新属性里。比如:
data: { hint: {'asdf':4} },
应该改成:
data: { json_data: { hint: {'asdf':4} } },
现在,json_data
需要用 JSON.stringify
转换成一个普通的字符串:
data: { json_data: JSON.stringify({ hint: {'asdf':4} }) },
这样就可以把数据作为字符串传给 Django,Django 可以通过以下方式获取这些数据:
data_string = request.POST.get('json_data')
然后可以把它转换成类似字典的对象(假设在代码开头用 import json
导入了 json
):
data_dict = json.loads(data_string)
或者,也可以不使用中间的 data_string
:
data_dict = json.loads(request.POST.get('json_data'))
print data_dict['hint']['asdf'] # Should print 4