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

Django模板中如何渲染模型TextField存储的HTML代码为实际元素

Django 实现TextField存储HTML渲染为页面元素方案

该需求完全可以实现,不需要更换其他字段类型,TextField已经可以满足存储需求,你遇到的输出问题是Django模板默认开启的HTML自动转义机制导致的。

Django为了避免XSS跨站脚本攻击,默认会把所有模板变量中的HTML标签做转义处理,所以你存的<h1>标签会被转义成纯文本输出,只需要针对性关闭对应字段的转义即可,有两种常用实现方案:

方案1:模板层加safe过滤器(灵活度高,推荐使用)

只需要在模板调用para_one字段的时候加上safe过滤器,告诉Django该内容是安全的不需要转义:

<!-- 模板调用示例 -->
{{ movie.para_one|safe }}

设置后你存入的<h1>Hello World</h1>就会被渲染为一级标题格式的内容,不会显示HTML标签。

方案2:模型层预标记安全内容(适合全场景渲染HTML的情况)

如果这个字段在所有调用位置都需要渲染为HTML,你可以直接在模型层完成安全标记,后续调用不需要再加过滤器:
首先导入安全标记工具:

from django.utils.safestring import mark_safe

在你现有的Movie模型中新增自定义属性:

class Movie(models.Model):
    # 原有所有字段保持不变
    para_one = models.TextField(blank=True)
    # 其他原有字段...

    @property
    def rendered_para_one(self):
        return mark_safe(self.para_one)

后续模板直接调用该属性即可:

{{ movie.rendered_para_one }}

安全注意事项

如果para_one字段的内容允许普通用户提交修改,请不要直接使用上述方案,否则会有严重的XSS攻击风险,你需要在保存内容前先对HTML做过滤,移除<script>、<iframe>等恶意标签后再存入数据库。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 16:36:05