Django为什么不自动转义我的标签?

时间:2020-03-06 14:56:05  来源:igfitidea点击:

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

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

当我在模板中调用PersonForm.details时,页面将相应地呈现<script>(也就是显示带有单词" Hello"的警报)。我对这种行为感到困惑,因为我一直认为默认情况下Django 1.0会自动转义模板内容。

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

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

{{ person_form.details }}

更新2:我已经尝试过"转义","强制转义"和" escapejs"。这些都不起作用。

解决方案

我们需要将值标记为|。我认为很安全(我猜想我们是在这里从数据库中填充值(?)):

{{ value|safe }}

我们可以张贴模板样本吗?可能更容易发现问题所在

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

{{ value|escape }}

[Edit2]也许来自Django Project文档的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.

[Edit3]关于force_escape呢:

{{ value|force_escape }}

...而且我知道这很明显,但是我们绝对可以确定浏览器中没有进行任何缓存吗?我本人曾几次绊倒过那;-)

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