我正在创建一个处理用户提交内容的应用。我希望用户能够使用基本的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 }}
。