我正在阅读面向Python开发人员的Matplotlib书,但正在努力遵循第8章“ Django应用程序中的Matplotlib”部分中的示例。
到目前为止,我已经发出了命令
django-admin startproject mpldjango
然后在mpldjango目录中
mpldjango
python manage.py startapp mpl
按照示例,mpldjango/mpl我做了views.py如下:
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应当在其中添加以下行:
mpldjango/urls.py
urlpatterns = patterns('', (r'mplimage.png', 'mpl.views.mplimage'), )
但是,我看不到它如何工作,因为在’default’中urls.py,urlpatterns有很多django.conf.urls.url对象:
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并看到a正弦曲线的图像之后)。
patterns
python manage.py runserver
localhost:8000/mplimage.png
根据无法导入的名称模式,这确实是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,则会看到所需的图: