python django字符串渲染问题

时间:2009-12-21 00:59:11

标签: python django

我正在尝试将字符串渲染为javascript(通常对我来说很好)这里是我的代码

HTML:

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

JAVA SCRIPT:

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

当我在javascript中尝试过相同的渲染并且它有效时,html版本可以正常运行。

3 个答案:

答案 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}}";