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

Izz*_*sin 0 javascript django django-templates

您可以从Django模板标签中获取Javascript读取变量var spec = "{{ foo }}";.

但是,如果foo需要是JSON对象.它变成这样:

var spec = "{"2": {"guid": 2, "contentBlocks": {"2_1": {"guid": "2_1", "type": "list"}}}}";
Run Code Online (Sandbox Code Playgroud)

前面和后面的引号使这个JavaScript语法无效,但是,如果我将它们遗漏,它也是一个无效的语法 var spec = {{ foo }};

解决这个问题的最佳方法是什么?要么foo输出完整的<script></script>块,要么让JavaScript从服务器请求此对象,而不是通过模板标记输出?......

Mar*_*ich 5

如果由于某种原因您希望它是一个字符串,请尝试使用单引号:

var spec = '{"2": {"guid": 2, "contentBlocks": {"2_1": {"guid": "2_1", "type": "list"}}}}';
Run Code Online (Sandbox Code Playgroud)

如果您希望它是JavaScript对象,请不要使用引号.

var spec = {"2": {"guid": 2, "contentBlocks": {"2_1": {"guid": "2_1", "type": "list"}}}};
Run Code Online (Sandbox Code Playgroud)

这是有效的语法.

但是,如果你没有将它标记为安全,Django将会删除引号.所以,假设json块是模板中的the_json,

var spec={{ the_json |safe }}
Run Code Online (Sandbox Code Playgroud)

是你想要的.如果没有安全过滤器,引号将输出为&quot;,使JSON无效.