【问题标题】:Django: How to render image with a templateDjango:如何使用模板渲染图像
【发布时间】:2014-01-25 17:30:32
【问题描述】:

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

我使用了示例 here。以下是该示例中代码的最终 sn-p:

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 变量。

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

【问题讨论】:

  • 将其保存到文件并使用 img 标签.... 或者将您的 view_chart URL 作为 src 放入 img 标签中

标签: python django cairo pycairo cairoplot


【解决方案1】:

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

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

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

【讨论】:

  • 那简直就是精神错乱。这是我缺乏理解,我做错了。我会试一试。
  • 如果您简单地考虑一下,这很容易:您的gen_chart 视图实际上 是一个图像。因此,如果您将其包含到 any html(不仅仅是 django 模板)中,它将显示该图像!
  • 太好了,效果很好。感谢您的解释,这绝对有助于掌握这个概念。
猜你喜欢
  • 2017-04-26
  • 2021-03-04
  • 1970-01-01
  • 2017-10-13
  • 2022-07-22
  • 2020-10-21
  • 2018-11-25
  • 2011-09-28
  • 2019-09-26
相关资源
最近更新 更多