使用Django,用户是否可以在表单字段中提交HTML,保存,然后在模板中呈现HTML?
一个例子是用户在文本字段中添加一个链接,然后应该在文本的其余部分中呈现为一个标记。
用户输入的内容如下:
this is a site called <a href="http://stackoverflow.com">SO</a>.
SO链接将是一个链接,而不是将其呈现为文本。
答案 0 :(得分:14)
Django默认逃脱。您可以通过filter or tag将字符串标记为safe
,以防止自动转义行为。
{{ my_text_with_html|safe }}
{% autoescape off %}
{{ my_test_with_html }}
{% endautoescape %}
如果您接受用户输入的html,您将需要对其进行清理,以便他们无法编写脚本等...为此,只需搜索python html清理并在将数据发送到模板之前应用它。
答案 1 :(得分:3)
您可以通过使用the appropriate filter标记HTML来告诉Django HTML是安全的:
{{ variable|safe }}
您还可以使用autoescape tag禁用自动转义:
{% autoescape off %}
{{ variable }}
{% endautoescape %}
但是,如果您为其他(未知)用户启用此功能,我强烈建议您使用其他内容,因为从您不想要的Javascript或其他HTML内容中正确清理HTML会非常困难(例如, ,关于* -arguments等)。 Django实际上提供了对您可以提供给用户的一些markup languages的基本支持。我猜markdown是最受欢迎的。