使用matplotlib示例时Django中的错误 [英] Error in Django when using matplotlib examples

查看:64
本文介绍了使用matplotlib示例时Django中的错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在测试Django和matplotlib的几种情况,例如法语.

I am testing several cases of Django and matplotlib such as this question or in french.

每次,它都可以在Mac上运行,但不能在服务器上接收以下错误:

Each time, it works on my mac, but does not on my server, where I receive the following error:

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 = to_filehandle(path_or_file, mode, True, encoding)
  File "/usr/local/lib/python3.6/dist-packages/matplotlib/cbook/__init__.py", line 615, in to_filehandle
    raise ValueError('fname must be a PathLike or file handle')
ValueError: fname must be a PathLike or file handle
[28/Mar/2018 19:09:11] "GET /mj/charts/mplimage.png HTTP/1.1" 500 82804

这是一个最小的代码段:

Here is a minimal snippet:

def mplimage(request):
    f = matplotlib.figure.Figure()
    canvas = FigureCanvasAgg(f)
    response = HttpResponse(content_type='image/png')
    canvas.print_png(response)
    plt.close(f)
    return response

我试图更新matplotlib,django等,但是什么也没做...

I have tried to update matplotlib, django and so on, but it did nothing...

推荐答案

此刻,matplotlib的编写函数

At the moment, matplotlib's writing functions require the seek ducktype to use the response at a file. You can write to a buffer, like this:

import io

def mplimage(request):
    f = matplotlib.figure.Figure()

    # Code that sets up figure goes here; in the question, that's ...
    FigureCanvasAgg(f)

    buf = io.BytesIO()
    plt.savefig(buf, format='png')
    plt.close(f)
    response = HttpResponse(buf.getvalue(), content_type='image/png')
    return response

这篇关于使用matplotlib示例时Django中的错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆