未定义Django NameError [app name]

时间:2011-02-12 20:02:46

标签: python django django-grappelli

尝试使用django-grappelli作为我的管理主题,安装具有惊人的挑战性。在我的urls.py中运行以下内容:

NameError .. name 'grappelli' is not defined

错误出现在行

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

使用pip安装了grappelli,grappelli位于我的sites-packages目录中。添加到我的INSTALLED_APPS,运行syncdb,尝试将grappelli添加到我的pythonpath,但没有运气。如果我在urls.py中导入grappelli,则错误会更改为AttributeError - 'module' has no attribute 'urls'

建议或任何形式的帮助都非常感谢。

4 个答案:

答案 0 :(得分:19)

行应为:

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

include要么获取urls模块的路径,要么它可以是返回url模式的python对象 http://docs.djangoproject.com/en/dev/topics/http/urls/#include

所以你的两个选项是上面的行(urls的路径)或

from grappelli.urls import urlpatterns as grappelli_urls

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

至于错误,它是Python中最直接的错误调试之一:grappelli未定义,例如..它尚未定义。

想象一下在shell中:

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

答案 1 :(得分:11)

我意识到这已经超过一年了,但当我遇到同样的问题时,这是谷歌的最佳成果之一。

您可以更改include()语句

而不是从grapelli.urls导入urlpatterns。
(r'^grappelli/', include(grappelli.urls))

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

这引起了我的注意,直到我注意到需要在include语句中引用package.urls。

答案 2 :(得分:1)

您可能希望在 urls.py

中导入以下内容
from django.conf.urls import include

答案 3 :(得分:1)

在宣布您的路线时,您忘记引用一个表达式。

grappelli.urls替换为'grappelli.urls'以使其正常工作!

正确的语法是:

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