首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JavaScript中的Django模板标记-带引号的无效语法,带引号的无效语法

JavaScript中的Django模板标记-带引号的无效语法,带引号的无效语法
EN

Stack Overflow用户
提问于 2010-11-11 18:09:24
回答 4查看 1.5K关注 0票数 0

你可以让Javascript从像var spec = "{{ foo }}";这样的Django模板标签中读取变量。

但是,如果foo需要是一个JSON对象。它会变成这样:

代码语言:javascript
运行
复制
var spec = "{"2": {"guid": 2, "contentBlocks": {"2_1": {"guid": "2_1", "type": "list"}}}}";

前面的引号和结束引号使其成为无效的JavaScript语法,但是,如果省略它们,它也是无效的语法var spec = {{ foo }};

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-11-11 18:27:11

如果它是JSON对象,则根本不需要加引号。JSON语法是有效的Javascript语法(当然,反之亦然)。

代码语言:javascript
运行
复制
var spec = {{ foo }};

如果foo的计算结果是JSON字符串,则非常好。

票数 2
EN

Stack Overflow用户

发布于 2010-11-11 18:31:20

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

代码语言:javascript
运行
复制
var spec = '{"2": {"guid": 2, "contentBlocks": {"2_1": {"guid": "2_1", "type": "list"}}}}';

如果您希望它是一个JavaScript对象,则根本不要使用引号。

代码语言:javascript
运行
复制
var spec = {"2": {"guid": 2, "contentBlocks": {"2_1": {"guid": "2_1", "type": "list"}}}};

这是有效的语法。

但是,如果您不将其标记为安全,Django将转义引号。因此,假设json块在模板中是the_json,

代码语言:javascript
运行
复制
var spec={{ the_json |safe }}

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

票数 5
EN

Stack Overflow用户

发布于 2010-11-11 20:25:52

如果JS嵌入到模板中,则其他答案完全正确。如果你有一个单独的静态服务的.js文件,那么你可以在你的模板中公开nesessary变量:

代码语言:javascript
运行
复制
<script type="text/javascript">
    var g_foo = {{ foo }};
</script>

--然后在.js中使用这个g_foo

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4153268

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档