加入收藏 | 设为首页 | 会员中心 | 我要投稿 阜阳站长网 (https://www.0558zz.com/)- 科技、建站、内容创作、云计算、网络安全!
当前位置: 首页 > 编程开发 > Python > 正文

python – 使用matplotlib示例时Django出错

发布时间:2020-12-04 21:29:37 所属栏目:Python 来源:互联网
导读:我正在测试Django和matplotlib的几个案例,例如 this question或 in french. 每次,它都可以在我的Mac上运行,但不在我的服务器上,我收到以下错误: Internal Server Error: /mj/charts/mplimage.pngTraceback (most recent call last): File /usr/local/lib/py

我正在测试Django和matplotlib的几个案例,例如 this question或 in french.

每次,它都可以在我的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 = 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

这是一个最小的片段:

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等,但它没有做任何事……

解决方法

目前,matplotlib的编写函数 require the seek ducktype在文件中使用响应.您可以写入缓冲区,如下所示:
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

(编辑:阜阳站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读