我正在尝试将字符串渲染为javascript(通常对我来说很好)这里是我的代码
HTML:
THE USER NAME IS : {{name}} has added app {{has_added_app}}
JAVA SCRIPT:
<script>
<!--
var userName = {{name}}
当我在javascript中尝试过相同的渲染并且它有效时,html版本可以正常运行。
答案 0 :(得分:8)
var userName = {{name}}
当您将HTML源视为:
时出现var userName = Bob
这是一个明显的错误:缺少引号。但是,只需在其周围加上引号:
var userName = '{{name}}';
对于一般情况来说还不够好。如果字符串包含引号字符,反斜杠或换行符怎么办?最好的情况,你的应用程序崩溃了。最糟糕的情况是,跨站点脚本安全漏洞。更重要的是,名称中的&
或<
字符也无法正常显示,因为Django autoescape可能会认为它位于非CDATA HTML上下文中,并且不适当地放大它们。
改为使用escapejs
过滤器:
var userName = '{{name|escapejs}}';
或者使用JSON编码器将任何基本数据类型转换为JavaScript文字格式,而不仅仅是字符串。 2.6中的标准库中有json,但请注意,这不会转义字符串中的<
字符,因此,为了将代码注入脚本元素,您必须手动转义以防止{ {1}}过早结束CDATA元素的序列。
答案 1 :(得分:1)
对javascript的评论:
var userName = "{{name}}";
答案 2 :(得分:0)
请记住,Django模板纯粹是文本的:它们并不“知道”您正在创建Javascript。您需要在字符串文字中包含Javascript所需的引号:
var userName = "{{name}}";