2010-07-27 139 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和更新的思想,当然还有所有基于标准的网络浏览器。