2017-08-02 108 views
2

我讀的書Matplotlib for Python Developers但我在努力效仿的部分「Matplotlib在Django應用程序」第8章中如何在Django Web應用程序中呈現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.pyurlpatternsdjango.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並看到啁啾的正弦曲線圖像)。

回答

4

根據cannot import name patterns這確實是Django的傳統接口。

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

我通過使 mpldjango/urls.py如下「更新」呢
相關問題