我有一个视图,我在其中创建一个字典,让我们说:
lst
我将其传递给我的上下文字典my_dict = {str(v): v*2 for v in range(2,8)}
my_dict['Total'] = {'Tip': 'Reconsider life choices'}
# bit of humour here
>> {'2': 4, '3': 6, '4': 8, '5': 10, '6': 12, '7': 14, 'Total': {'Tip': 'Reconsider life choices'}}
。
在我的模板中,我用以下内容重建它:
'my_dict_json': json.dumps(my_dict)
我不确定它是否有所不同,但我的预期视图用<button id="btn_exp" type="button" class="btn btn-primary" onclick="sendDicts()">
<script>
var d = JSON.parse('{{my_dict_json|safe}}');
// This is a function I bind to the onclick attr of a button
function sendDicts(){
$.ajax({
url: '{% url 'my_model:intended_view' %}',
type: 'POST',
contentType: 'application/json',
data: {
'my_dict': d,
'another_dict': d2
},
dataType: 'json'
});
}
</script>
修饰,无论如何,当我检查(调试)预期的视图时,我注意到@csrf_exempt
var没有它上面的request
数据和POST
上的字典作为二进制字符串有很多request.body
,如果我尝试使用%
,它会失败悲惨的:
json.loads(request.body.decode())
我在这里缺少什么?
答案 0 :(得分:0)
JSON.parse应该处理包含双引号属性名称的字符串,如下所示:&#39; {&#34; 2&#34;:4,&#34; 3&#34;:6}&# 39;
答案 1 :(得分:0)
我实际上通过移除contentType: 'application/json'
解决了这个问题,无法解释原因,但......它正在发挥作用。