为什么Django不会自动转义我的<script>标签?</script>

时间:2008-09-30 17:04:01

标签: django templates

我的Django应用程序有一个Person表,其中包含名为details的字段中的以下文本:

<script>alert('Hello');</script>

当我在模板中调用PersonForm.details时,页面会相应地呈现脚本(例如,显示带有“Hello”字样的警报)。我对这种行为感到困惑,因为我一直认为Django 1.0 autoescaped模板内容是默认的。

知道这里可能会发生什么吗?

更新:这是我模板中的代码段。没有什么非常性感的:

{{ person_form.details }}

更新2 :我已尝试escapeforce-escapeescapejs。这些都不起作用。

2 个答案:

答案 0 :(得分:4)

您需要将值标记为|我认为安全(我猜你在这里填写数据库中的值(?)):

{{ value|safe }}

您可以发布模板样本吗?可能会更容易看出什么是错的

[编辑] ..或者你是说你想要它来逃避价值(让他们安全)?您是否尝试过手动转义字段:

{{ value|escape }}

[Edit2] 也许escapejs from the Django Project docs相关:

escapejs

New in Django 1.0.

Escapes characters for use in JavaScript strings. This does not make the string safe for use in HTML, but does protect you from syntax errors when using templates to generate JavaScript/JSON.

[编辑3] 如何使用force_escape:

    {{ value|force_escape }}

...我知道这是显而易见的,但你绝对肯定你的浏览器没有进行任何缓存吗?我自己曾经绊过那一次; - )

答案 1 :(得分:0)

发现问题。我用来将数据呈现给某些Ext小部件的JSON字符串是罪魁祸首。非常感谢Jon Cage。尽管问题是由另一个来源引起的,但是接受了答案。