JavaScript中的Django模板标签 - 没有引号的无效语法,带引号的无效语法

时间:2010-11-11 10:09:24

标签: javascript django django-templates

您可以从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从服务器请求此对象,而不是通过模板标记输出? ......

4 个答案:

答案 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 }}

是你想要的。如果没有安全过滤器,引号将输出为&quot;,使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告诉我语法无效,但在执行脚本时,它的工作非常完美。