为什么启用admin.autodiscover()时Django会抛出异常?
这是我的设置。我在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 文件,然后再重新启动服务器……就搞定了!