我的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中保留相同的结构并以与JS中相同的方式使用它?
首先,在$.ajax通话中,不要直接将所有POST数据放入data属性中,而是将其添加到名称为的另一个属性中json_data。例如:
$.ajax
data
json_data
应该变成:
data: { json_data: { hint: {'asdf':4} } },
现在,json_data应该使用将转换为纯字符串JSON.stringify:
JSON.stringify
data: { json_data: JSON.stringify({ hint: {'asdf':4} }) },
这会将数据作为字符串传递给Django,可以通过以下方式检索:
data_string = request.POST.get('json_data')
可以将其转换为类似dict的对象(假设顶部json导入import json):
json
import json
data_dict = json.loads(data_string)
或者,没有中间体data_string:
data_string
data_dict = json.loads(request.POST.get('json_data')) print data_dict['hint']['asdf'] # Should print 4