为什么启用admin.autodiscover()时Django会抛出异常?

0 投票
3 回答
1419 浏览
提问于 2025-04-15 17:15

这是我的设置。我在Dreamhost上使用Django版本1.1.1,Python 2.4。我的问题是,每当我创建一个简单的应用程序,并且启用了admin.autodiscover(),Django就会抛出一个异常。我的设置如下:

from django.conf.urls.defaults import *
from testapp.views import HelloWorld

from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
    (r'^HelloWorld/$', HelloWorld),

    # Uncomment the admin/doc line below and add 'django.contrib.admindocs' 
    # to INSTALLED_APPS to enable admin documentation:
    (r'^admin/doc/', include('django.contrib.admindocs.urls')),

    # Uncomment the next line to enable the admin:
    (r'^admin/', include(admin.site.urls)),
)

我的settings.py文件看起来是这样的:

INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.admin',
'django.contrib.admindocs',
'testapp',
)

我的testapp.views文件看起来是这样的:

from django.http import HttpResponse

def HelloWorld(request):
    return HttpResponse("Hello world")

如果我把admin.autodiscover()注释掉,我就可以访问HelloWorld的视图。如果我启用admin.autodiscover(),Django就会抛出一个我无法捕获的异常。

有没有人知道这可能是什么原因,以及我该如何解决这个问题?

相关问题:

3 个回答

0

这是个老问题,但现在依然有用。我今天遇到了类似的麻烦。问题是我把一个Django应用文件夹中的一组文件(lib/cache)重构成了一个单独的文件(lib/cache.py)。因为在cache目录里还有一个__init__.py文件,Python把这个空目录当成了一个模块,这就导致我无法访问cache.py

在我的urls.py文件中注释掉admin.autodiscover(),让我更容易找到问题,但还是需要一些猜测。

1

我猜测你在testapp/admin.py文件中没有导入你想为其创建管理界面的models.Model类。你可以试试下面的做法:

./manage.py shell # you may immediately get a stack trace
>> import testapp.admin # I'll bet it blows up.
4

我之前遇到过类似的问题,当我重命名一个应用时。简单来说,如果你已经启动了这个应用,并且在你的 urls.py 文件中使用了 admin.autodiscover(),那么它会在你的应用文件夹里生成一个 admin.pyc 文件。只需要删除这个 admin.pyc 文件,然后再重新启动服务器……就搞定了!

撰写回答