【问题标题】:Allowing basic html markup in django在 django 中允许基本的 html 标记
【发布时间】:2013-08-05 14:11:51
【问题描述】:

我正在创建一个将处理用户提交的内容的应用。我想让用户使用基本的 html 标记(即 )使他们的基于文本的内容看起来很漂亮。但是我确实想阻止他们使用脚本标签之类的东西。 Django 会自动转义所有内容,因此它也会禁用所有安全标记。我可以使用以下方法禁用它:

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

不过,这也会启用所有有害的脚本标签。 Django 确实提供了换行符过滤器标签,它可以将空格转换为 br 或 p 标签,同时保持 html 安全:

{{ somevar|linebreaks }}

很遗憾,我不知道有任何过滤器允许使用 b 或 i 标签。

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


更新

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 这很好用,但是我有几种方法可以将数据提交到服务器。在某些情况下,TinyMCE 集成不是一种选择。
    • 美汤一定会奏效。很高兴你明白了。
    • django-tinymce 是一个输入编辑器。问题在于将输出转义给用户,而不是数据库的输入。
    猜你喜欢
    • 2013-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-26
    • 1970-01-01
    • 1970-01-01
    • 2017-06-04
    • 2014-06-06
    相关资源
    最近更新 更多