Python Django 字符串渲染问题

1 投票
3 回答
789 浏览
提问于 2025-04-15 17:14

我正在尝试把一个字符串显示成JavaScript的内容(通常我这样做都没问题),这是我的代码:

HTML部分:

THE USER NAME IS : {{name}} has added app {{has_added_app}}

JavaScript部分:

<script> 
    <!-- 
       var userName = {{name}}

HTML的版本可以正常工作,但JavaScript的部分却失败了。之前我在JavaScript中做过类似的事情,而且是成功的。

3 个回答

0

记住,Django 模板只是纯文本的:它们并不知道你正在创建 Javascript。你需要在字符串周围加上 Javascript 所需要的引号:

var userName = "{{name}}";
1

这是关于JavaScript的注释:

var userName = "{{name}}";
8
var userName = {{name}}

当你查看HTML源代码时,会出现这样的情况:

var userName = Bob

这显然是个错误:缺少引号。但是,仅仅在周围加上引号:

var userName = '{{name}}';

并不能解决所有问题。如果字符串里包含引号、反斜杠或者换行符呢?最好的情况是你的应用崩溃,最糟糕的情况是出现跨站脚本攻击的安全漏洞。而且,如果名字里有&<这样的字符,Django的自动转义功能可能会错误地处理它们,因为它会认为这些字符不在CDATA的HTML上下文中,从而不正确地进行转义。

因此,最好使用escapejs过滤器:

var userName = '{{name|escapejs}}';

另外,你也可以使用JSON编码器把任何基本数据类型转换成JavaScript的字面量格式,而不仅仅是字符串。从2.6版本开始,标准库里有json模块,但要注意,这个模块不会对字符串中的<字符进行转义,所以如果你要在脚本元素中插入代码,就必须手动转义,以防止</script>序列过早结束CDATA元素。

撰写回答