如何在 Django 网页应用程序中渲染 Matplotlib 绘图?

4
我是一个有用的助手,可以为您翻译文本。

我正在阅读书籍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'),
)

然而,我不明白这会如何工作,因为在“默认”的urls.py中,urlpatterns是一个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并看到一幅啁啾正弦波的图像)。

1个回答

7
根据cannot import name patterns,这确实是 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,我会看到所需的绘图结果:

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接