如何將生成的圖像嵌入到Django模板中?在Django模板中嵌入生成的圖像
像
return render_to_response('graph.html', { 'img': get_graph() })
我不希望這一點 - 因爲它只是發送圖像
http.HttpResponse(get_graph(), mimetype="image/png")
如何將生成的圖像嵌入到Django模板中?在Django模板中嵌入生成的圖像
像
return render_to_response('graph.html', { 'img': get_graph() })
我不希望這一點 - 因爲它只是發送圖像
http.HttpResponse(get_graph(), mimetype="image/png")
您可以使用Base64編碼的圖像數據,並使用一個data URI。
您可以將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"/>
我想嵌入在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和更新的思想,當然還有所有基於標準的網絡瀏覽器。
你是否發現了這個問題的好解決方案Sujit? – super9 2011-04-11 10:46:49