Django:如何使用模板渲染图像

时间:2014-01-07 20:55:40

标签: python django cairo pycairo cairoplot

目标:我想使用模板显示生成的.png图像。

我使用了示例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,因为在创建responsec变量不存在。

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

1 个答案:

答案 0 :(得分:2)

由于您已经有了一个工作gen_chart视图,可以将您的图像创建为png,为什么不添加

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

到你的HTML模板并正常呈现它?你想让自己的生活变得困难吗?