目标:我想使用模板显示生成的 .png 图像。
我在这里使用了这个例子。这是该示例的最后一段代码:
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 内容)。
我在这里找到了相关的解决方案。在该解决方案中,它建议执行以下操作:
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
,因为response
创建时变量不存在c
。
创建图像并将其传递给模板进行渲染的正确方法是什么?