Python 显示模板中存储为二进制blob的图像

Python 显示模板中存储为二进制blob的图像,python,google-app-engine,flask,jinja2,flask-restful,Python,Google App Engine,Flask,Jinja2,Flask Restful,我有一个模型,图像存储为二进制blob。我想在模板中显示此图像以及有关对象的其他数据。由于图像不是一个单独的文件,我不知道如何显示它。我尝试过设置标题,或者使用send_file或render_template,但是我要么没有得到图像,要么只得到图像而没有得到模板的其余部分。如何在模板中将二进制blob显示为图像 class A(ndb.Model): id= ndb.IntegerProperty() x= ndb.StringProperty() y= ndb.Str

我有一个模型,图像存储为二进制blob。我想在模板中显示此图像以及有关对象的其他数据。由于图像不是一个单独的文件,我不知道如何显示它。我尝试过设置标题,或者使用
send_file
render_template
,但是我要么没有得到图像,要么只得到图像而没有得到模板的其余部分。如何在模板中将二进制blob显示为图像

class A(ndb.Model):
    id= ndb.IntegerProperty()
    x= ndb.StringProperty()
    y= ndb.StringProperty()
    image = ndb.BlobProperty()

图像以字节形式存储。使用base64对其进行编码,并将其作为数据URI插入呈现的HTML中。可以将对象及其编码图像传递给模板

from base64 import b64encode

@app.route("/show/<int:id>")
def show(id):
    obj = A.query(A.id == id).fetch(1)[0]
    image = b64encode(obj.image).decode("utf-8")
    return render_template("show_a.html", obj=obj, image=image)
从base64导入b64encode
@应用程序路线(“/show/”)
def显示(id):
obj=A.query(A.id==id).fetch(1)[0]
图像=B64编码(对象图像)。解码(“utf-8”)
返回渲染模板(“show_a.html”,obj=obj,image=image)
{{obj.x}}
{{obj.y}}


这是次优的,因为每次呈现页面时都会发送数据URI,而客户端可以缓存图像文件。最好将图像文件存储在一个目录中,将路径存储在数据库中,然后单独提供图像文件