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
相关产品推荐
相关产品推荐

