2011-09-12 15 views
2

DjangoとPythonの初心者です。Django設定でのカスタムオブジェクトの初期化

私はservices.pyという名前のアプリケーションルートにpythonファイルを作成しました。このファイルの中には、SchedulerServiceという名前のクラスがあります。私は設定モジュールでSchedulerServiceのインスタンスを初期化しようとしているので、ビューが実行されるたびに利用可能になります。 Javaの世界では、シングルトンオブジェクトを使用して、自動初期化サーブレットまたは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

モジュールレベルのグローバル変数を同じビューで使用できます。

関連する問題