2010-07-27 81 views
4

如何將生成的圖像嵌入到Django模板中?在Django模板中嵌入生成的圖像

return render_to_response('graph.html', { 'img': get_graph() })

我不希望這一點 - 因爲它只是發送圖像

http.HttpResponse(get_graph(), mimetype="image/png")
+0

你是否發現了這個問題的好解決方案Sujit? – super9 2011-04-11 10:46:49

回答

4

您可以使用Base64編碼的圖像數據,並使用一個data URI

3

您可以將URL映射到其中一個視圖函數,該函數返回包含圖像數據的HttpResponse,並使用此URL作爲<img>元素的src。

urls.py

from django.conf.urls.defaults import * 

urlpatterns = patterns('', 
    (r'^image/', 'views.get_image'), 
) 

views.py

from django.http import HttpResponse 

def get_image(request): 
    image_data = get_graph() # assuming this returns PNG data 
    return HttpResponse(image_data, mimetype="image/png") 

的index.html

<img src="image"/> 
2

我想嵌入在django頁面中生成matplotlib圖像,而不用兩次訪問django服務器(一個獲取模板,一個生成圖像)。我把我的模板下的圖像

<img alt="embedded" src="data:image/png;base64,{{inline_png}}"/> 

然後在視圖的方法:

from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas 
from matplotlib.figure import Figure 
import cStringIO as StringIO 
import base64 

num_signed_off = random.randint(0, 10) 
num_reviewed = random.randint(0, 50) 
num_unreviewed = random.randint(0, 50) 

fig = Figure() 
ax = fig.add_subplot(111, aspect='equal', axis_bgcolor='b') 
ax.pie([num_signed_off, num_reviewed, num_unreviewed], 
     labels=['Signed Off', 'Reviewed', 'Unreviewed'], 
     colors=['b', 'r', 'g'], 
     ) 
ax.set_title('My Overall Stats') 
ax.set_axis_bgcolor('r') 
canvas=FigureCanvas(fig) 
outstr = StringIO.StringIO() 
canvas.print_png(outstr) 
ret['inline_png'] = base64.b64encode(outstr.getvalue()) 
outstr.close() 

return render(request, "my_view.html", ret) 

與此唯一的問題是,它並沒有在IE7或IE8的工作 - 它與IE9和更新的思想,當然還有所有基於標準的網絡瀏覽器。