8

使用 Django,用户是否可以在表单字段中提交 HTML,保存,然后在模板中呈现 HTML?

一个示例是用户在文本字段中添加一个链接,然后该链接应呈现为文本其余部分中的标签。

用户会输入如下内容:

this is a site called <a href="http://stackoverflow.com">SO</a>.

SO 链接将是一个链接,而不是将其呈现为文本。

4

2 回答 2

16

Django 默认转义。您可以将字符串标记为safe通过过滤器或标签来防止自动转义行为。

{{ my_text_with_html|safe }}

{% autoescape off %}
    {{ my_test_with_html }}
{% endautoescape %}

如果您接受用户输入的 html,则需要对其进行清理,以便他们无法编写脚本等。为此,只需搜索 python html 清理并在将数据发送到模板之前应用它。

Python HTML sanitizer/scrubber/filter

于 2012-06-03T17:37:47.960 回答
3

您可以通过使用适当的过滤器标记 HTML 来告诉 Django HTML 是安全的:

{{ variable|safe }}

您还可以使用autoescape 标签来禁用自动转义:

{% autoescape off %}
    {{ variable }}
{% endautoescape %}

但是,如果您为其他(未知)用户启用此功能,我强烈建议您使用其他东西,因为从 Javascript 或其他您不想要的 HTML 内容(例如,on* -参数等)。Django 实际上附带了对您可以提供给用户的一些标记语言的基本支持。我猜降价是最受欢迎的。

于 2012-06-03T17:46:56.293 回答