2009-12-21 56 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()使其更容易追蹤這一點,但仍需要一些猜測。