在django中允许基本的html标记

时间:2013-08-04 23:11:27

标签: html django django-templates html-content-extraction

我正在创建一个处理用户提交内容的应用。我希望用户能够使用基本的html标记使其基于文本的内容看起来很漂亮,即<我> < b> < br> 。但是我确实希望阻止它们使用脚本标记之类的东西。 Django会自动转义所有内容,因此它也会禁用所有安全标记。我可以通过使用:

来禁用它

{{ somevar|safe }}{% autoescape off %}

但是,这也将启用所有有害脚本标记。 Django确实提供了linebreaks过滤器标签,它将白色空间转换为br或p标签,同时保持html安全:

{{ somevar|linebreaks }}

不幸的是,我不知道任何允许使用b或i标签的过滤器。

所以我想知道这个问题是否有智能解决方案。如果您建议使用第三方库,最好在保存模型或呈现内容时使用该解决方案。


更新

最后我采用了这个解决方案Python HTML sanitizer / scrubber / filter。后一个答案提供了一种使用Beautiful Soup库从用户提交的内容中删除所有不需要的html标签的方法。这可以在保存模型之前完成,因此在渲染页面时可以安全地使用模板过滤器{{ somevar|safe }}

1 个答案:

答案 0 :(得分:1)

看看django-tinymce。它应该为您提供所需的灵活性。在进入数据库之前,您将最安全地清理内容。可以将TinyMCE配置为允许或不允许您喜欢的任何标签。