Django:允许用户在表单字段中提交有效的HTML

时间:2012-06-03 17:24:24

标签: django django-forms

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

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

用户输入的内容如下:

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

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

2 个答案:

答案 0 :(得分:14)

Django默认逃脱。您可以通过filter or tag将字符串标记为safe,以防止自动转义行为。

{{ my_text_with_html|safe }}

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

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

Python HTML sanitizer / scrubber / filter

答案 1 :(得分:3)

您可以通过使用the appropriate filter标记HTML来告诉Django HTML是安全的:

{{ variable|safe }}

您还可以使用autoescape tag禁用自动转义:

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

但是,如果您为其他(未知)用户启用此功能,我强烈建议您使用其他内容,因为从您不想要的Javascript或其他HTML内容中正确清理HTML会非常困难(例如, ,关于* -arguments等)。 Django实际上提供了对您可以提供给用户的一些markup languages的基本支持。我猜markdown是最受欢迎的。