2011-02-12 25 views
6

嘗試將django-grappelli用於我的管理主題,安裝出人意料地具有挑戰性。運行到我的urls.py如下:Django NameError [應用程序名稱]未定義

NameError .. name 'grappelli' is not defined 

將引發錯誤就行了

(r'^grappelli/', include(grappelli.urls)) 

與PIP安裝格拉佩利,並格拉佩利是在我的網站-packages目錄。添加到我的INSTALLED_APPS,運行syncdb,嘗試添加grappelli到我的pythonpath,但沒有運氣。如果我在urls.py中導入grappelli,將錯誤更改爲AttributeError - 'module' has no attribute 'urls'

建議或任何形式的幫助都會受到高度讚賞。

回答

17

行應爲:

(r'^grappelli/', include('grappelli.urls')) 

include要麼需要一個路徑到的URL模塊,也可以是一個Python對象返回的URL模式 http://docs.djangoproject.com/en/dev/topics/http/urls/#include

所以你兩個選擇要麼是線以上(路徑到url)或

from grappelli.urls import urlpatterns as grappelli_urls 

(r'^grappelli/', include(grappelli_urls)), 

至於錯誤,它是最直接的錯誤之一ors在Python中進行調試:grappelli未定義,因爲它沒有被定義。

想象的殼是:

>>> print grappelli 
exception: variable undefined 
>>> grappelli = 'hello' # we just defined grappelli 
>>> print grappelli 
'hello' 
+0

感謝@Yuji - 我不能相信我沒有嘗試。這似乎應該是顯而易見的,但是當我輸入grappelli並沒有給我帶來任何麻煩時我就絆倒了。假設向我的installed_apps添加grappelli讓我可以訪問該對象作爲變量。只要它能讓我接受就會接受。 – jonathanatx 2011-02-12 20:15:34

10

我意識到這是一歲多,但它是在谷歌上的結果,當我有同樣的問題之一。

而不是從grapelli.urls輸入URL模式,你也可以改變include()語句

(r'^grappelli/', include(grappelli.urls)) 

(r'^grappelli/', include('grappelli.urls')) 

這把我關了一點,以及直到我注意到了需要在include語句中引用package.urls。

1

您可能要導入urls.py如下:

from django.conf.urls import include 
1

當聲明你的路線,你忘了引用的表達式。

替換grappelli.urls通過'grappelli.urls'使它工作!然後

正確的語法是:

(r'^grappelli/', include('grappelli.urls'))