2009-12-21 60 views
0

这是我的设置。我在Dreamhost,Python 2.4上使用Django版本1.1.1。我遇到的问题是每当我创建一个简单的应用程序,并且还启用了admin.autodiscover()时,Django将引发异常。我的设置:为什么Django在启用admin.autodiscover()时抛出异常?

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会抛出一个我无法捕获的异常。

有谁知道为什么这可能会发生,我可以做些什么来解决它?

+0

您是否有任何有关错误的信息?打印/追踪?在设置中设置debug = True以确保您获得错误屏幕。 – sotangochips 2009-12-21 17:41:51

+0

您是否也可以添加异常消息?你通常会从Django(和一般的Python)中获得非常具有描述性的异常。 – Kristian 2009-12-21 17:43:00

+1

我在dreamhost上有无尽莫名的Django错误。我终于切换到明确支持Django的webfaction。我不记得有关dreamhost的是如果你获得日志文件?你什么也没有,没有回溯?在webfaction上,您可以获得每个应用程序的日志目录。 – EMiller 2009-12-21 17:44:15

回答

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. 
+0

是的 - 当我得到尝试导入testapp.admin我得到一个ImportError异常 – letsgofast 2009-12-21 18:22:25

4

我在重命名应用程序时遇到类似问题。基本上,如果您启动了该应用并在urls.py文件中使用了admin.autodiscover()的管理员,则会在您的应用文件夹中创建一个admin.pyc文件。删除这个admin.pyc文件并再次运行服务器...和瞧!

0

老问题,但仍然相关。我有一个类似的问题,今天难倒了我。问题在于我将Django应用程序文件夹(lib/cache)中的一个目录中的一组文件重构为一个文件(lib/cache.py)。由于cache目录中仍有__init__.py,因此Python将空目录视为模块并阻止访问cache.py

在我的urls.py中注释掉admin.autodiscover()使其更容易追踪这一点,但仍需要一些猜测。