Python Django 字符串渲染问题
我正在尝试把一个字符串显示成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元素。