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

Django如何将TextField存储的HTML格式博客内容正常渲染到前端模板

解决方案

Django默认会自动转义模板输出的HTML字符,避免XSS注入风险,你可以通过以下几种方式实现自定义HTML内容的正常渲染:

方案1:使用模板safe过滤器(最简便)

直接在模板输出变量时添加safe过滤器,告知Django该内容是安全的无需转义,修改后的模板代码如下:

{% extends 'base.html' %}

{% block content %}
<h1>{{ blog.title }}</h1>
<p>{{ blog.content|safe }}</p>
{% endblock content %}

方案2:模型层标记内容为安全(无需重复修改模板)

如果多处需要渲染该字段内容,可以在模型层通过mark_safe方法预先标记字段为安全内容,修改models.py如下:

from django.utils.safestring import mark_safe

class Blog(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()
    date_created = models.DateField(auto_now_add=True)

    def __str__(self):
        return self.title
    
    # 新增返回安全HTML内容的方法
    def rendered_content(self):
        return mark_safe(self.content)

之后模板中直接调用该方法即可,无需额外加过滤器:

<p>{{ blog.rendered_content }}</p>

安全注意事项

如果你的博客内容仅由你本人在后台录入,以上方案可以直接使用。如果存在普通用户提交内容的场景,直接渲染原生HTML会存在XSS攻击风险,建议先对HTML内容做标签过滤,仅保留<p>、<img>等安全标签后再渲染。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 07:06:04