2010-07-27 3 views
4

어떻게 생성 된 이미지를 장고 템플릿에 임베드합니까? 나는이 원하지 않는django 템플릿 안에 생성 된 img 임베딩

뭔가

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

처럼 - 그냥 당신은 base64로 인코딩에게 이미지 데이터를 할 수있는 이미지

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

이 문제에 대한 좋은 해결책을 찾았습니까? – super9

답변

4

을 보내고 data URI을 사용하기 때문에.

3

이미지 데이터가있는 HttpResponse를 반환하는보기 기능 중 하나에 URL을 매핑하고이 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 서버에 두 번 이동하지 않고 django 페이지에서 matplotlib 이미지를 생성했습니다 (하나는 템플릿을 가져오고 하나는 이미지를 생성 함). 내가보기 방법에

<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 이상, 모든 표준 기반 웹 브라우저에 대한 생각, 그리고 물론.