Django NameError [应用名] 未定义

7 投票
4 回答
38192 浏览
提问于 2025-04-16 11:43

我在使用django-grappelli这个主题来美化我的管理后台时,安装过程出乎意料地困难。在我的urls.py文件中遇到了以下问题:

NameError .. name 'grappelli' is not defined

错误出现在这一行:

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

我通过pip安装了grappelli,并且它确实在我的site-packages目录里。我把它添加到了我的INSTALLED_APPS中,运行了syncdb,还尝试把grappelli添加到我的pythonpath里,但都没有成功。如果我在urls.py中导入grappelli,错误就变成了AttributeError - 'module' has no attribute 'urls'

如果有人能提供建议或任何帮助,我将非常感激。

4 个回答

2

你可能需要在 urls.py 文件中导入以下内容:

from django.conf.urls import include
11

我知道这个问题已经有一年多了,但当我遇到同样的问题时,它是谷歌搜索的前几条结果之一。

与其从 grapelli.urls 导入 urlpatterns,不如直接修改 include() 语句

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

改成

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

这让我有点困惑,直到我注意到在 include 语句中需要用引号包裹 package.urls。

21

这一行应该是:

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

include 可以用来指定一个网址模块的路径,或者它也可以是一个返回网址模式的 Python 对象。你可以查看这个链接了解更多信息:http://docs.djangoproject.com/en/dev/topics/http/urls/#include

所以你有两个选择,要么使用上面那一行(网址的路径),要么:

from grappelli.urls import urlpatterns as grappelli_urls

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

关于这个错误,它是 Python 中最简单的错误之一,容易调试:grappelli 没有被定义,也就是说……它还没有被定义。

想象一下你在命令行界面:

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

撰写回答