我正在测试几个Django和matplotlib案例,如这个问题或法语.
每次,它都可以在我的Mac上运行,但不在我的服务器上,我收到以下错误:
Internal Server Error: /mj/charts/mplimage.png
Traceback (most recent call last):
File "/usr/local/lib/python3.6/dist-packages/django/core/handlers/exception.py", line 35, in inner
response = get_response(request)
File "/usr/local/lib/python3.6/dist-packages/django/core/handlers/base.py", line 128, in _get_response
response = self.process_exception_by_middleware(e, request)
File "/usr/local/lib/python3.6/dist-packages/django/core/handlers/base.py", line 126, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/root/src/jm/majority_judgment/views.py", line 39, in mplimage
canvas.print_png(response)
File "/usr/local/lib/python3.6/dist-packages/matplotlib/backends/backend_agg.py", line 526, in print_png
with cbook.open_file_cm(filename_or_obj, "wb") as fh:
File "/usr/lib/python3.6/contextlib.py", line 81, in __enter__
return next(self.gen)
File "/usr/local/lib/python3.6/dist-packages/matplotlib/cbook/__init__.py", line 624, in open_file_cm
fh, opened = …Run Code Online (Sandbox Code Playgroud) 背景: 我从Django开始,对Python的经验有限,所以请耐心等待.我编写了一个Python脚本,它定期运行(在cron作业中)将数据存储到SQLite3数据库中,我想从中读取并使用Matplotlib生成图像(更具体地说,使用Basemap).这开始是学习Python和构建一个"有趣"的项目的兴趣.我正在选择Django框架,因为它似乎有相当好的文档记录,虽然我对web.py感到惊喜,因为它的要求具有"轻量级"(但web.py的稀疏文档使得它开始时更难) ; 但目前,我并没有完全陷入僵局.
问题1874642中的示例几乎就是我正在寻找的,其中图像是即时生成的,无需将其写入磁盘(因此必须定期处理清理生成的文件).
然而,我不清楚的是如何将生成的图像合并到模板中,而不是让浏览器简单地显示图像.从教程材料,我猜测,它应该有可能以表示一些掺入的变量django.template.Context进django.http.HttpResponse,但是所引用的例如通过直接与默对象响应,而不是与上下文建立它快捷键它.
所以我要问的是:
是否有必要print_png在生成的Matplotlib FigureCanvas对象上调用?或者是FigureCanvas复制的"未打印"到Context,以便在Django模板中我明确地编写HTML img标记并手动放置标记的属性?
我的印象是我必须将Canvas写入磁盘(即执行a canvas.print_figure("image.png")),以便HTML img标记在Django模板中看到它.但我想确保没有"更易于管理的方式" - 即传递图像Context并让模板"神奇地"生成它.如果真的有必要写入磁盘,我想我可以使用Django的文件系统缓存工具以某种方式编写生成的图像(当然,检查图像是否已经为给定的输入参数集编写).我欢迎你提出这方面的建议,因为目前尚不清楚将要生成的图像的大小和数量,因此我希望避免花费磁盘空间而宁愿等待生成图像(即使需要几秒钟).
先感谢您.