Django - 将模型序列化为json以用作JavaScript对象

时间:2017-02-03 08:56:50

标签: javascript json django

我需要从我的模型中获取数据作为Javascript中的对象。 我在我的JS代码中使用它(“数据”是我的Django视图中返回的上下文的一部分):

var data= {{ data|safe }};

在我看来,我有:

context = {'data': {
             'model1': serializers.serialize('json', model1.objects.all()),
             'model2': serializers.serialize('json', model2.objects.all()),
          }

我遇到的问题是:

1)我在JS中遇到错误,除非我在上下文变量上使用“safe”,

2)即使我使用“safe”,该对象也是不可用的,因为它只是一个字符串(即data.model1 [0]返回“[”而不是数组中的第一个元素。)

这样做的正确方法是什么?

2 个答案:

答案 0 :(得分:1)

您可以使用json模块,解决方案可以是:

import json

data = {
        'model1': json.loads(serializers.serialize('json', model1.objects.all())),
        'model2': json.loads(serializers.serialize('json', model2.objects.all())),
       }
context = {'data': json.dumps(data)}

然后var data = {{data|safe}}

答案 1 :(得分:1)

问题是虽然data是有效的JSON,但data本身是一个无效的JSON的Python词典。

可能最简单的方法是分离出变量:

var data = {
    model1: {{ data.model1|safe }},
    model2: {{ data.model2|safe }}
}