一尘不染

如何在Django Web应用程序中渲染Matplotlib图?

python

我正在阅读面向Python开发人员的Matplotlib但正在努力遵循第8章“
Django应用程序中的Matplotlib”部分中的示例。

到目前为止,我已经发出了命令

django-admin startproject mpldjango

然后在mpldjango目录中

python manage.py startapp mpl

按照示例,mpldjango/mpl我做了views.py如下:

import django
from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas
from matplotlib.figure import Figure
import numpy as np

def mplimage(request):
    fig = Figure()
    canvas = FigureCanvas(fig)
    ax = fig.add_subplot(111)
    x = np.arange(-2,1.5,.01)
    y = np.sin(np.exp(2*x))
    ax.plot(x, y)
    response=django.http.HttpResponse(content_type='image/png')
    canvas.print_png(response)
    return response

接下来,这本书说mpldjango/urls.py应当在其中添加以下行:

urlpatterns = patterns('',
       (r'mplimage.png', 'mpl.views.mplimage'),
)

但是,我看不到它如何工作,因为在’default’中urls.pyurlpatterns有很多django.conf.urls.url对象:

from django.conf.urls import url
from django.contrib import admin

urlpatterns = [
    url(r'^admin/', admin.site.urls),
]

并且没有patterns定义构造函数。也许这本书(来自2009年)指的是旧版Django
API?如果是这样,我将如何修改此代码以使其起作用?(也就是说,在python manage.py runserver我应该能够浏览localhost:8000/mplimage.png并看到a正弦曲线的图像之后)。


阅读 272

收藏
2021-01-20

共1个答案

一尘不染

根据无法导入的名称模式,这确实是Django的旧界面。我通过mpldjango/urls.py如下方式“更新”它:

from django.conf.urls import include, url
from django.contrib import admin
import mpl.views

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'mplimage.png', mpl.views.mplimage),
]

现在,如果我浏览到http:// localhost:8000 /
mplimage.png,则会
看到所需的图:

在此处输入图片说明

2021-01-20