You need to enable JavaScript to run this app. Django中如何将Python传入HTML的字符串变量渲染为可识别的HTML元素?
优惠活动
大模型
产品
解决方案
定价
更多

Django中如何将Python传入HTML的字符串变量渲染为可识别的HTML元素?

Django模板中HTML变量无法渲染为元素的解决方法

问题原因

Django模板默认开启了自动HTML转义机制,目的是防范XSS跨站脚本攻击,所有传入模板的字符串内容都会被自动转义为HTML实体字符,所以你生成的HTML标签会被直接当做纯文本展示。

解决方法

你有两种常用方案可以选择:

方案1:模板中添加safe过滤器

这是最简便的方案,直接修改模板中body变量的写法,添加safe过滤器告知Django该内容是安全的、不需要转义:

{% extends "mapper/layout.html" %}

{% block title %}
    mapper
{% endblock %}

{% block body %}
    <h1>{{ title }}</h1>
    <div>
     {{ body|safe }} 
    </div>

{% endblock %}

该方案适合你确定body的内容是完全可控的场景,比如是你自己从Markdown转换生成、没有普通用户提交的不可信内容。

方案2:视图层用mark_safe标记内容

如果你不想在模板中额外加过滤器,也可以在views.py中处理好HTML内容后,用Django自带的mark_safe方法标记该内容为安全内容,后续模板直接使用{{ body }}即可:

# 先导入依赖
from django.utils.safestring import mark_safe

# 你转换得到HTML字符串的逻辑
html_content = 你的markdown转HTML结果
# 标记为安全内容后再传入模板
return render(request, "你的模板路径", {"title": 你的标题, "body": mark_safe(html_content)})

安全提醒

两种方案都要求你确保要渲染的HTML内容是安全的,如果body内容包含普通用户提交的输入,不要直接使用上述方法,必须先对HTML内容做消毒处理,过滤掉<script>等危险标签,避免出现XSS安全漏洞。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 20:54:01