我正在创建一个应用程序来处理用户提交的内容。我想让用户使用基本的html标记,即<i><b><br>。然而,我确实想防止他们使用脚本标记之类的东西。Django将自动转义所有内容,因此它也将禁用所有安全标记。我可以使用禁用此功能
{{ somevar|safe }}
或{% autoescape off %}
然而,这也将启用所有harmfull脚本标记。Django确实提供了linebreaks过滤器标签,它可以将空白空间转换为br或p标签,同时保持html的安全:
{{ somevar|linebreaks }}
不幸的是,我不知道有任何过滤器允许使用b或I标签。
所以我想知道这个问题是否有一个聪明的解决方案。如果您建议使用第三方库,最好在保存模型或呈现内容时使用该解决方案。
更新
最后,我使用了这个解决方案PythonHTML消毒器/洗涤器/过滤器。后一个答案提供了一种使用Beautiful Soup库从用户提交的内容中删除所有不需要的html标记的方法。这可以在保存模型之前完成,因此在呈现页面时可以安全地使用模板过滤器{{ somevar|safe }}
。
看看django-tinymce。它应该给你想要的灵活性。在内容进入数据库之前,对其进行最安全的清理。TinyMCE可以配置为允许或不允许您想要的任何标签。