首页 > 解决方案 > 在视图中创建的图像不会在模板 django 中呈现

问题描述

我试图在我的模板中渲染一个我用 matplotlib 创建的简单图形。我想在页面正文中呈现图表,而不仅仅是返回带有该图表的 HttpResponse。但我无法让它工作。这是我尝试过的。

view.py 代码

def showGraph(request):

content_x = [10, 20, 30]
content_y = ['one', 'two', 'three']
plt.bar(content_x, content_y)
plt.title('Some chart')
plt.show()
buffer = io.BytesIO()
canvas = plt.get_current_fig_manager().canvas
canvas.draw()
graphIMG = PIL.Image.frombytes('RGB', canvas.get_width_height(), canvas.tostring_rgb())
graphIMG.save(buffer, "PNG")
content_type = "Image/png"
buffercontent = buffer.getvalue()
graphic = (buffercontent, content_type)
plt.close()
return render(request, 'projectRelated/LAN/graphs.html', {'graphic': graphic})

html页面代码

{% extends 'base.html' %}
{% load static %}
{% block container_content %}
  <img src="data:image/png;base64,{{ graphic }}">
{% endblock container_content %}

上面的代码只是显示一个随机图标..

标签: pythondjangomatplotlib

解决方案


由于我无法破译您的十六进制值以查看发生了什么,因此解决此问题的最佳方法是将图像保存在media目录中,然后简单地将其传递path给模板以在模板中呈现它。

x.html

{% block main %}
    <img src="{{ media_url }}{{ image.file }}">
{% endblock %}

在 settings.py

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(PROJECT_PATH, 'media')

有关示例,请参见此处

您可以从此处阅读有关文档的更多信息


推荐阅读