你可以让Javascript从像var spec = "{{ foo }}";
这样的Django模板标签中读取变量。
但是,如果foo需要是一个JSON对象。它会变成这样:
var spec = "{"2": {"guid": 2, "contentBlocks": {"2_1": {"guid": "2_1", "type": "list"}}}}";
前面的引号和结束引号使其成为无效的JavaScript语法,但是,如果省略它们,它也是无效的语法var spec = {{ foo }};
解决这个问题的最佳方法是什么?或者让foo
输出完整的<script></script>
块,或者让JavaScript从服务器请求这个对象,而不是通过模板标记输出它?......
发布于 2010-11-11 18:27:11
如果它是JSON对象,则根本不需要加引号。JSON语法是有效的Javascript语法(当然,反之亦然)。
var spec = {{ foo }};
如果foo
的计算结果是JSON字符串,则非常好。
发布于 2010-11-11 18:31:20
如果出于某种原因,您希望它是一个字符串,请尝试使用单引号:
var spec = '{"2": {"guid": 2, "contentBlocks": {"2_1": {"guid": "2_1", "type": "list"}}}}';
如果您希望它是一个JavaScript对象,则根本不要使用引号。
var spec = {"2": {"guid": 2, "contentBlocks": {"2_1": {"guid": "2_1", "type": "list"}}}};
这是有效的语法。
但是,如果您不将其标记为安全,Django将转义引号。因此,假设json块在模板中是the_json,
var spec={{ the_json |safe }}
就是你想要的。如果没有安全过滤器,引号将输出为"
,从而使JSON无效。
发布于 2010-11-11 20:25:52
如果JS嵌入到模板中,则其他答案完全正确。如果你有一个单独的静态服务的.js文件,那么你可以在你的模板中公开nesessary变量:
<script type="text/javascript">
var g_foo = {{ foo }};
</script>
--然后在.js中使用这个g_foo
。
https://stackoverflow.com/questions/4153268
复制相似问题