我想将一些服务器端数据推送到我的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错误。然后我尝试评论代码并查看渲染内容,这就是我所看到的:
[{'name': u'My Event', 'internal_name': u'my_event'}];
显然,这不是理想的格式。将服务器端Django数据推送到Javascript的正确方法是什么?
答案 0 :(得分:2)
您看到的格式是因为您传递给模板的对象正在使用其repr
表示形式转换为字符串,然后这些字符串将被html编码(因此,如果它们作为文本显示在页面上,你会在页面上看到正确的python repr
。
您想要的是将对象转换为Javascript语法,而不是进一步编码。
幸运的是,内置json.dumps
会将您的对象转换为JSON。您还需要关闭该块的转义:
{% autoescape off %}
<script type="text/javascript">
var event_types = {{event_types}};
</script>
{% endautoescape %}