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

Django中经markdown转换的HTML内容如何在网页中正常渲染?

问题根源

Django模板默认开启了HTML自动转义机制,会把变量中的HTML标签转义为字符实体(比如把<p>转成&lt;p&gt;),所以你提前用markdown生成的HTML字符串不会被渲染,只会原样展示。


解决方法1:模板层加safe过滤器(最便捷)

直接在输出变量后追加|safe过滤器,告知Django该内容是安全的HTML,无需转义,修改你的chattr.html对应部分即可:

{% for chat_stream in chat %}
    <p>
    {% if not forloop.last %}
        <b>bot:</b> <br> {{chat_stream.ss|safe}} <br>
        <b>{{user}}:</b> <br> {{chat_stream.user|safe}} <br>
    {% endif %}
    </p>
{% endfor %}

解决方法2:视图层标记为安全字符串

如果你希望从数据层面就标记内容无需转义,可以在视图中用mark_safe包裹生成的HTML:
首先导入依赖:

from django.utils.safestring import mark_safe

然后修改存储逻辑:

chatItem = ChatStream(
    ss= mark_safe(markdown.markdown(response)), 
    user= mark_safe(markdown.markdown(message)), 
    name=ip
)

安全提示

关闭HTML转义会带来XSS跨站脚本攻击风险,建议提前对用户输入和模型返回的内容做标签过滤,仅保留<p>、<code>、<br>等你需要的安全标签,可借助bleach等库实现过滤。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 10:36:03