2015-07-11 102 views
4

我有一個存儲爲二進制blob圖像的模型。我想在模板中顯示此圖像以及有關該對象的其他數據。由於圖像不是一個單獨的文件,我無法弄清楚如何顯示它。我嘗試設置標題,或使用send_filerender_template,但我要麼沒有得到圖像或只有獲得圖像,而不是模板的其餘部分。如何在模板中將二進制blob顯示爲圖像?在模板中以二進制blob存儲的顯示圖像

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

回答

7

圖像以字節形式存儲。使用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) 
    return render_template('show_a.html', obj=obj, image=image) 
<p>{{ obj.x }}<br/> 
{{ obj.y }}</p> 
<img src="data:;base64,{{ image }}"/> 

這是次優的,因爲數據URI發送每次呈現頁面時,在顯示圖像文件可以由客戶端緩存。將圖像文件存儲在目錄中,將路徑存儲在數據庫中,然後單獨提供圖像文件會更好。