【发布时间】:2012-08-13 21:02:56
【问题描述】:
背景: 我刚开始使用 Django,并且对 Python 的经验有限,所以请多多包涵。我编写了一个 Python 脚本,它定期运行(在 cron 作业中)将数据存储到 SQLite3 数据库中,我想从中读取并使用 Matplotlib(更具体地说,使用 Basemap)生成图像。这始于对学习 Python 和构建一个足够“有趣”的项目的兴趣。我之所以选择 Django 框架,是因为它的文档似乎相当完善,尽管我对 web.py 感到惊喜,因为它的要求是“轻量级”的(但 web.py 的稀疏文档使它开始有点困难) ;但目前,我还没有完全死心于一个框架。
question 1874642 中的示例几乎是我正在寻找的,图像是即时生成的,无需将其写入磁盘(因此必须定期清理生成的文件) .
但是,我不清楚如何将生成的图像合并到模板中,而不是让浏览器简单地显示图像。从教程材料中,我猜应该可以将一些 django.template.Context 中包含的变量表示为 django.http.HttpResponse,但引用的示例通过直接使用 Mime 对象而不是使用 Context 构建它来简化它.
所以我要问的是:
是否需要在生成的 Matplotlib
FigureCanvas对象上调用print_png?还是FigureCanvas复制“未打印”到上下文,以便在 Django 模板中我明确编写 HTMLimg标签并手动放置标签的属性?我的印象是我有将 Canvas 写入磁盘(即执行
canvas.print_figure("image.png")),以便 HTMLimg标记在 Django 中看到它模板。但我想确定没有“更易于管理的方式”——即在Context中传递图像并让模板“神奇地”生成它。如果确实需要写入磁盘,我想我可以使用 Django 的文件系统缓存工具以某种方式写入生成的图像(当然,检查是否已经为给定的输入参数集写入了图像)。我欢迎您在这方面提出建议,因为目前尚不清楚将生成的图像的大小和数量,因此我希望避免花费磁盘空间,而是更喜欢等待生成图像(即使需要几秒钟)。
提前谢谢你。
【问题讨论】:
-
避免将文件写入磁盘的一种方法是使用数据 URI 方案,如 en.wikipedia.org/wiki/Data_URI_scheme 中所述。有必要将图像导出为字节数组,并在制作图像 URI 的 Base64 中对其进行编码。该链接还指出了它的一些缺点。
-
这里显示了一个解决方案:stackoverflow.com/questions/16819805/…
标签: django image templates matplotlib