html - 在 django 中允许基本的 html 标记

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

我正在创建一个应用程序来处理用户提交的内容。我想让用户使用基本的 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 }}

最佳答案

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

关于html - 在 django 中允许基本的 html 标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18048530/

相关文章:

python - Django - 将多选字段传递到 POST 字典中

javascript - 动态 Bootstrap 模态

html - CSS - 在复选框上方对齐数字?

mysql - 使用 django-mysql 从 JSON 选择不同的值

django - Dockercontinuum/miniconda3容器未显示 “conda”

django登录不显示错误消息

javascript - 在 Ajax 请求中刷新 Data Div

html - html右侧的额外空间?

android - 如何为网站快捷方式(主屏幕)配置应用程序名称?

python-3.x - 'AssertionError' 对象没有属性 'message'