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

如何将数据库中的HTML代码正确渲染到Django模板?解决DTL变量渲染时显示原始HTML标签问题

解决Django模板中HTML代码不渲染的问题

你遇到的是Django默认的HTML转义机制导致的问题——Django为了防范XSS攻击,会自动把模板变量里的HTML标签转义成纯文本,所以页面上就显示原始标签而非渲染后的效果了。

快速修复方案

在模板中输出HTML内容的变量后添加|safe过滤器,明确告诉Django这段内容是安全的,可以直接渲染:

修改你的模板代码如下:

<a href="#"><img src="/media/company_images/{{ vacancy.company.logo }}" width="130" height="80" alt=""></a>
<div class="d-flex align-items-baseline align-content-baseline">
    <h1 class="h2 mt-4 font-weight-bold" >{{ vacancy.title }}</h1>
    <p class="m-0 pl-3">{{ vacancy.salary_min }}р – {{ vacancy.salary_max }}р</p>
</div>
<!-- 如果skills字段也存储了HTML格式内容,同样需要添加safe过滤器 -->
<p class="mt-2">{{ vacancy.skills|safe }}</p>
<p class="text-muted mb-4">Primal Assault (15-30 человек), Рязань или удаленно</p>
<div style="line-height: 1.8;">
    {{ vacancy.description|safe }}
</div>

背后的原因

Django模板系统默认开启自动转义,会把<、>、&等特殊字符转换成对应的HTML实体(比如<会变成&lt;),这样浏览器就会把它们当成纯文本解析,而非HTML标签。当你确认变量里的HTML内容是安全的(比如是后台手动录入的、经过审核的内容),就可以用|safe过滤器关闭该变量的转义。

安全注意事项

如果这些HTML内容来自用户提交的输入(比如用户填写的表单内容),直接使用|safe会存在XSS攻击风险。这种场景下建议使用bleach库清理HTML:

  1. 安装依赖:pip install bleach
  2. 在模板中使用|bleach过滤器(需先在项目配置中注册该过滤器,或在视图层处理后再传递给模板),它会只保留你指定的安全标签和属性,兼顾渲染效果与安全性。

内容的提问来源于stack exchange,提问作者Malashenkov.ea

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 19:27:48