如何将python / Django列表/词典转换为javascript

时间:2014-08-07 11:47:27

标签: javascript python django

我想将一些服务器端数据推送到我的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>

这不起作用,因为我得到了&#34;意想不到的令牌&#39;&#39;&#34;&#34;&#34;作为一个javascript错误。然后我尝试评论代码并查看渲染内容,这就是我所看到的:

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

显然,这不是理想的格式。将服务器端Django数据推送到Javascript的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

您看到的格式是因为您传递给模板的对象正在使用其repr表示形式转换为字符串,然后这些字符串将被html编码(因此,如果它们作为文本显示在页面上,你会在页面上看到正确的python repr

您想要的是将对象转换为Javascript语法,而不是进一步编码。

幸运的是,内置json.dumps会将您的对象转换为JSON。您还需要关闭该块的转义:

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