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

Huu*_*uze 2 django templates

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

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

当我调用PersonForm.details模板时,页面会相应地呈现脚本(即显示带有“Hello”一词的警报)。我对这种行为感到困惑,因为我一直认为Django 1.0默认情况下会自动转义模板内容。

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

更新:这是我的模板中的片段。没什么特别性感的:

{{ person_form.details }}
Run Code Online (Sandbox Code Playgroud)

更新2:我已经尝试过escape,,force-escapeescapejs。这些都不起作用。

Jon*_*age 5

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

{{ value|safe }}
Run Code Online (Sandbox Code Playgroud)

您可以发布模板示例吗?可能会更容易看出问题所在

[编辑] ..或者您是说您希望它转义这些值(使它们安全)?您是否尝试过手动转义该字段:

{{ value|escape }}
Run Code Online (Sandbox Code Playgroud)

[Edit2]也许Django 项目文档中的 escapejs是相关的:

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.
Run Code Online (Sandbox Code Playgroud)

[Edit3] force_escape 怎么样:

    {{ value|force_escape }}
Run Code Online (Sandbox Code Playgroud)

...我知道这是一个显而易见的问题,但您绝对确定您的浏览器中没有进行任何缓存?我自己也被那个绊倒过几次;-)