将plt.savefig()渲染到带有烧瓶的HTML页面

时间:2017-09-20 17:35:55

标签: python html flask

我想渲染一个包含图像的html页面,由一些matplotlib函数生成。所以我认为我必须:

  1. 执行所有必要的matplotlib绘图
  2. 将其输出到/ static folder
  3. 中的PNG文件
  4. 将生成的PNG文件呈现为html
  5. 所以在我的main.py中我做了:

    plt.imshow(a)
    for i in range(len(obj)):
        x = obj[i][u'faceRectangle'][u'left']
        y = obj[i][u'faceRectangle'][u'top']
        w = obj[i][u'faceRectangle'][u'width']
        h = obj[i][u'faceRectangle'][u'height']
        plt.plot([x,x+w],[y,y], color='r')
        plt.plot([x,x+w],[y+h,y+h], color='r')
        plt.plot([x,x],[y,y+h], color='r')
        plt.plot([x+w,x+w],[y,y+h], color='r')
    plt.savefig('static/1.png')
    plt.clf()
    

    产生" 1.PNG"文件在我的/静态文件夹中,如下所示:

    比我渲染具有以下行的html模板:

    <img src="{{url_for('static', filename='1.png')}}" >
    

    此代码完美运行,图像包含在生成的html页面中。 比起奇怪的事情,当我用另一个图像运行相同的代码时,它很好地用新的替换静态/ 1.png文件,但是它一直在html页面中显示第一个图像。即便如此,静态/文件夹中也没有这样的图像了。

    如果是浏览器缓存文件,我怎么能避免其他用户发生同样的情况,我是否需要以某种方式制作随机文件名?

1 个答案:

答案 0 :(得分:2)

考虑在URL的末尾添加缓存无效的随机数:

>>> '1.png?%d' % time.time()
'1.png?1505929617'

或使用例如app.config['SEND_FILE_MAX_AGE_DEFAULT'] = 60