2011-09-12 58 views
2

我是Django和Python的新手。初始化Django設置中的自定義對象

我在我的應用程序根目錄下創建了一個名爲services.py的python文件。在這個文件裏我有一個名爲SchedulerService的類。我正嘗試在設置模塊中初始化SchedulerService的一個實例,以便每次執行視圖時都可以使用該實例。在Java世界中,我將使用單例對象並使用自動init servlet或MBean對其進行初始化。

我遇到的問題是我無法將任何自定義模塊導入到settings.py文件中。例如:

settings.py

from theapp.services import SchedulerService 

我收到以下消息時,我嘗試啓動我的開發服務器

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.) 

我得到同樣的錯誤,如果我嘗試導入視圖或模型類放入設置模塊中。

也許我正在做的完全錯誤,應該以另一種方式實施。

任何幫助將不勝感激。

回答

1

該特定消息是循環導入問題的特徵 - theapp.services可能導入了settings,或者導入了導入settings的東西,而Python無法解析依賴關係。

你也許可以通過移動進口函數或方法的一個解決這個問題,但我應該說,settings.py是強調是實例東西的地方。它確實不是那個意思。

我希望由於您引用了一個「全局」對象,您已經考慮過線程安全問題:不要忘記,每個請求都不會創建和銷燬Django進程,一個進程可以在多個請求之前被破壞,所以任何全局對象將在這些請求之間共享。如果這不是你想要的,你需要在請求週期本身(可能是中間件)中實例化對象,並將它與一個只持續請求生命週期的對象相關聯 - 換句話說,可能是對象本身的request

否則,您可以執行類似於管理應用程序的操作,並將您的實例化調用放入urls.py

+0

這是你懷疑的循環依賴 – user578888

1

您的「theapp」目錄是否包含__init__.py文件?有必要將其識別爲Python模塊。

+0

是的。它是由django startapp命令創建的目錄。 – user578888

0

您可以在相同的views.py中使用模塊級別的「全局」變量