如何将Python/Django列表/字典传入JavaScript

0 投票
1 回答
2939 浏览
提问于 2025-04-18 16:23

我想把一些服务器端的数据放到我的JavaScript里,用来显示。我的数据模型里有一系列可以序列化的字典对象,我想在JavaScript中使用这些对象。它们的定义是这样的:

event_types = EventType.objects.all()
    et = []
    for t in event_types:
        et.append({'name' : t.name, 'internal_name' : t.internal_name}) # both names are strings

我把这些对象放到上下文变量中,然后传递给我的模板,接着尝试把它们添加到JavaScript里:

<script type="text/javascript">
    var event_types = {{event_types}};
</script>

但是这样不行,我遇到了一个JavaScript错误,提示“意外的符号 '&'”。于是我尝试把那段代码注释掉,看看渲染出来的是什么,结果是这样的:

[{&#39;name&#39;: u&#39;My Event&#39;, &#39;internal_name&#39;: u&#39;my_event&#39;}];

显然,这样的格式是不太理想的。那么,把服务器端的Django数据正确地传递到JavaScript里应该怎么做呢?

1 个回答

2

你看到的格式是因为你传给模板的对象被转换成了字符串,这个转换是通过它们的 repr 表示来完成的,然后这些字符串又被进行了 HTML 编码(这样如果它们在页面上显示为文本,你就能看到正确的 Python repr 表示)。

你想要的是把你的对象转换成 JavaScript 的语法,而不是进一步编码。

幸运的是,内置的 json.dumps 可以把你的对象转换成 JSON 格式。你还需要关闭这个块的转义功能:

{% autoescape off %}
<script type="text/javascript">
    var event_types = {{event_types}};
</script>
{% endautoescape %}

撰写回答