我正在创建一个将处理用户提交的内容的应用程序。我想让用户使用基本的 html 标记(即 < i > < 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 }}
在渲染页面时可以安全地使用模板过滤器。