Ans*_*rty 2 html python django image matplotlib
我在视图中创建了一个图并将该图保存为模板文件夹中的 png。但是当我尝试使用<img>模板 html 文件中的标签显示此保存的图像时,该图像不会显示。这是我的文件夹结构的图像:
文件夹结构
这就是我在视图中保存我的情节的方式:
def result(request):
if request.POST and request.FILES:
mycsv=pd.read_csv(request.FILES['csv_file'])
c=mycsv.X
#We divide by the class height(basically) so that Xi+1-Xi=1
x = [d / 5 for d in c]
n=len(x)
b=mycsv.Y
divi=np.sum(b)
f = [e / divi for e in b]
#Thus sum(f)=1, makes calculation of mean simpler
#PLOTTING BEGINS
fig = plt.figure()
ax = plt.subplot(111)
ax.plot(x, f)
plt.title('Pearson Type 1 ')
ax.legend()
#plt.show()
fig.savefig('polls/templates/polls/plot.png')
context = {'n':n,}
return render(request, 'polls/result.html', context)
else:
return HttpResponse("Form Not Submitted")
Run Code Online (Sandbox Code Playgroud)
我尝试获取图像的 result.html 文件是:
<h1>Graph with {{n}} points</h1>
<img src='./plot.png' />
Run Code Online (Sandbox Code Playgroud)
我在我的本地主机上运行它,权限有问题吗?
我刚刚开始学习 django 并想测试这个东西。感谢您的帮助!
你的方法有很多问题,但我会试着给你一些关于如何继续的建议,尽管你可能想重新考虑它。
首先,将您的文件保存到 templates 目录不会使其可用于您的 template。模板目录是一个特殊的配置,它允许你使用 Django 的模板加载器,它不会像你的图像那样加载静态文件。
您可以将图像保存到静态文件并使用{% static %}模板标签来恢复它,但同样,这将是错误的方法,因为您的图像不是静态内容,它是动态创建的。
由于创建后图像中的数据没有用处,我的建议是使用TempFile将图像存储在临时文件中,或者(如果它足够轻)使用StringIO存储在内存中,然后将这些字节加载到上下文中作为base64
from StringIO import StringIO
import base64
img_in_memory = StringIO()
fig.savefig(img_in_memory, format="png") #dunno if your library can do that.
context['image'] = base64.b64encode(img_in_memory.getvalue())
Run Code Online (Sandbox Code Playgroud)
然后,在您的模板中,您将执行以下操作:
<img src="data:image/png;base64,{{image}}" />
Run Code Online (Sandbox Code Playgroud)