如何将Python/Django列表/字典传入JavaScript
我想把一些服务器端的数据放到我的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错误,提示“意外的符号 '&'”。于是我尝试把那段代码注释掉,看看渲染出来的是什么,结果是这样的:
[{'name': u'My Event', 'internal_name': u'my_event'}];
显然,这样的格式是不太理想的。那么,把服务器端的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 %}