You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Django与Jinja2项目中存储并正确显示含HTML标签的文本?

解决Jinja2渲染HTML标签被转义的问题

以下是几种可行的解决方案,按需选择:

  • 直接使用Jinja2的safe过滤器
    默认情况下Jinja2会自动转义HTML标签,防止XSS攻击。如果你的内容是可信的(比如自己编辑的,不是用户输入),直接在模板里给字段加上safe过滤器即可:

    <p>{{ article.text|safe }}</p>
    

    这样<br>这类标签就会被浏览器解析成换行,而不是显示成纯文本。

  • 存储纯文本+模板内处理分段
    不用在数据库里存HTML标签,而是用普通换行符(\n)分隔段落。然后在模板里处理:
    方式一:替换换行为<br>

    <p>{{ article.text|replace('\n', '<br>')|safe }}</p>
    

    方式二:按换行拆分生成独立<p>标签(更符合HTML语义)

    {% for paragraph in article.text.split('\n') if paragraph.strip() %}
        <p>{{ paragraph }}</p>
    {% endfor %}
    

    这种方式更易维护,也避免了直接存储HTML的潜在风险。

  • 存储Markdown格式+渲染为HTML
    数据库里存Markdown语法的内容(比如用空行分段,用##做二级标题等),然后借助Python的markdown库将其转为HTML,再在模板里渲染。

    1. 先安装依赖:pip install markdown
    2. 在Flask(如果用Flask的话)里注册过滤器:
      from markdown import markdown
      app.jinja_env.filters['markdown'] = markdown
      
    3. 模板里使用:
      {{ article.text|markdown|safe }}
      

    这种方式让内容编辑更友好,生成的HTML也更规范。

  • 注意:XSS防护
    如果内容来自用户输入(非可信来源),不管用哪种方式,都要先做XSS过滤,比如用bleach库清理危险标签和属性,避免注入攻击。

内容的提问来源于stack exchange,提问作者Kate

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 09:32:08