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

Django动态生成的临时base64图片无法在模板中显示问题求助

问题原因与解决方案

你遇到的问题核心不是模板引用逻辑错误,是base64编码后的数据类型不符合模板渲染要求导致的:

核心问题

base64.b64encode() 方法返回的是bytes字节类型,直接传入模板渲染时,Django会自动将其转为带b'前缀、'后缀的字符串格式,最终生成的img src会变成data:image/png;base64,b'iVBORw0KGgo...',前缀多了无效字符,自然无法正常识别为图片。

修复步骤

1. 调整base64编码逻辑

将生成图片的代码最后一行改为字符串格式输出:

fig = sns_plot.get_figure()
img_in_memory = BytesIO()
fig.savefig(img_in_memory, format="png")
image = base64.b64encode(img_in_memory.getvalue()).decode('utf-8')

2. 可选:优化模板渲染(避免特殊字符转义)

如果编码后仍存在显示异常,可以在模板变量后加safe过滤器,取消Django的自动转义:

<img src="data:image/png;base64,{{ image|safe }}" />

3. 可选:修正上下文赋值逻辑

你现有代码中直接context = result[0]会覆盖父类生成的默认上下文,建议改为更新上下文避免潜在问题:

def get_context_data(self, *args, **kwargs):
    context = super().get_context_data(*args, **kwargs)
    context["patient_id"] = self.kwargs["patient_id"]
    result = find_treatment(context["patient_id"])
    # 替换原有的context = result[0]
    context.update(result[0])
    context["patient"] = result[1]
    context['image'] = result[2]
    return context

验证方法

页面加载后右键选择「检查」,查看对应img标签的src属性值,确认开头没有b'字符、编码内容完整即可正常显示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 10:54:03