Skip to main content
 首页 » 编程设计

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

2024年08月28日27傻小

目标:我想使用模板显示生成的 .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 View 会显示一个漂亮的饼图。但是,我想使用模板来呈现它,这样我就可以在生成的页面中添加更多数据(标签、描述、标题和其他 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,因为 response 变量在创建时不存在c。

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

请您参考如下方法:

既然你已经有了一个可用的 gen_chart View 来创建你的图像为 png 为什么不添加一个

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

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