2009-07-05 57 views
8

我有一個Django項目,它似乎可以很好地與settings.py配合使用,它也導入了local_settings.py而沒有問題。在Django settings.py中導入文件的問題

我現在已經添加了以下線路在設置文件的末尾:

try: 
    from extras import * 
except ImportError, e: 
    print "import extras failed :: " + `e` 

extras.py是額外的配置信息,坐在同一目錄settings.py和local_settings.py文件但是,我現在越來越:

import extras failed :: ImportError('Settings cannot be imported, because environment variable DJANGO_SETTINGS_MODULE is undefined.',) 

這似乎試圖

from django.contrib.auth.models import User,UserManager 
from django.db import models 
是由於我該extras.py文件中的

任何人有任何想法?

歡呼聲

回答

17

典型地,具有settings.py引線等

from django.db import models 

一行循環依賴。這會導致導入錯誤,在Django的不同版本中報告會稍有不同。例如,如果我說行添加到工作Django的設置和調用「manage.py殼」,我得到:

Error: Can't find the file 'settings.py' in the directory containing './manage.py'. It appears you've customized things. You'll have to run django-admin.py, passing it your settings module. (If the file settings.py does indeed exist, it's causing an ImportError somehow.)

如果我刪除了這一行,又一切正常。

原因是Django的模型加載機器(位於django.db.models包中)導入settings.py,讀取它的INSTALLED_APPS以查看應該安裝哪些應用程序,然後加載這些應用程序。如果您嘗試導入django.db東西在settings.py(您可以通過添加一個print語句__init__.py爲您安裝的應用程序的一個確認。)

,這將導致一個圓形的進口依存度和ImportError - 相關錯誤信息。

一種解決方法是將需要有問題導入(和導入本身)的功能移到應用程序中。

+2

+1一般規則是不要在settings.py中從Django導入任何東西。 – 2009-07-06 16:44:01

3

那麼DJANGO_SETTINGS_MODULE如何在您的環境中設置?它可能是這樣的,或者是隱式導入其他嵌套導入導致設置被導入時導致的設置的結果,這是一種「循環依賴」,可能會有幾個令人討厭的效果(儘管我不相信它會有特定的一個你正在觀察,所以我傾向於第一個假設)。