2014-01-07 35 views
1

目标:我想使用模板显示生成的.png图像。Django:如何使用模板渲染图像

我与示例here一起工作。下面是代码从例如最后段:

def gen_chart(request): 
    ... 
    pp = CairoPlot.PiePlot(surface, data, heigth, width, background = None, gradient = True, shadow = True, series_colors = colors) 
    pp.render() 

    response = HttpResponse(mimetype="image/png") 
    pp.surface.write_to_png(response) 

    return response 

访问gen_chart视图显示了一个相当饼图。但是,我想使用模板进行渲染,因此我可以在生成的页面(标签,说明,标题和其他html内容)中添加更多数据。

我找到了一个相关的解决方案here。在该解决方案中,建议做这样的事情:

c = RequestContext(request,{'result':json.dumps(result)}) 
t = Template("{{result}}") # A dummy template 
response = HttpResponse(t.render(c), mimetype = u'application/json') 
return response 

我尝试如下,以适应代码:

c = RequestContext(request, {'result': pp.surface.write_to_png(response)}) 
t = Template('test_app/pie_chart_template.html') 
response = HttpResponse(t.render(c), mimetype="image/png") 
return response 

但正如你可能已经猜到了,我遇到了错误UnboundLocalError: local variable 'response' referenced before assignment,因为在创建c时,response变量不存在。

创建图像并将其传递给模板进行渲染的正确方法是什么?

+0

将它保存到一个文件,并使用img标签....或将您的view_chart网址作为src在img标签 –

回答

2

既然你已经有一个工作gen_chart查看创建图像以PNG为什么不加

<img src='{% url "gen_chart" %}' /> 

到HTML模板,通常呈现呢?你是想让你的生活变得困难吗?

+0

这就等于疯狂。这是我缺乏理解,我做错了。我会给你一个镜头。 –

+0

如果你简单的想到它很容易:你的''gen_chart''视图实际上是一个图像。所以如果你把它包含到* any * html(不只是django模板),它会显示该图像! – Serafeim

+0

非常好,工作。感谢您的解释,这绝对有助于理解这个概念。 –