您可以从Django模板标签(例如var spec = "{{ foo }}";
)获取Javascript读取变量。
但是,如果foo需要是JSON对象。它变成这样:
var spec = "{"2": {"guid": 2, "contentBlocks": {"2_1": {"guid": "2_1", "type": "list"}}}}";
前面和后面的引号使这个JavaScript语法无效,但是,如果我将它们删除,它也是无效的语法var spec = {{ foo }};
解决此问题的最佳方法是什么?是要让foo
输出完整的<script></script>
块,还是让JavaScript从服务器请求此对象,而不是通过模板标记输出? ......
答案 0 :(得分:5)
如果由于某种原因你想要它是一个字符串,请尝试使用单引号:
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无效。
答案 1 :(得分:1)
如果它是JSON对象,则根本不需要引用它。 JSON语法是有效的Javascript语法(当然反过来不一定正确)。
var spec = {{ foo }};
如果foo
求值为JSON字符串,则非常好。
答案 2 :(得分:1)
如果将JS嵌入到模板中,其他答案完全可以。如果您有一个静态提供的单独的.js文件,那么您可以在模板中公开nesessary变量:
<script type="text/javascript">
var g_foo = {{ foo }};
</script>
- 然后在.js中使用此g_foo
。
答案 3 :(得分:0)
感谢您的回答。事实证明,Dreamweaver告诉我语法无效,但在执行脚本时,它的工作非常完美。