2009-07-23 11 views
2

私はdjangoアプリケーションを開発しています。私の問題に重要なモジュールは以下の通りです:コマンド実行時のdjango-circularインポートの問題

globals.py - >は、アプリケーション全体で使用される定数を含んでいます。 SITE_NAMESITE_DOMAINは2つあり、いくつかの文字列を埋めるために使用されます。ここで私はそれらを定義する方法である:

from django.contrib.sites.models import Site 
... 
SITE_DOMAIN = Site.objects.get_current().domain 
SITE_NAME = Site.objects.get_current().name 

models.py - >モデルは、このモジュール内に住んでいます。 globals.pyからいくつかの定数をインポートする

some_command.py - >グローバルからいくつかの定数もインポートするコマンド。

実行、コマンドglobals.pyからの輸入を一定にし、実行円形のインポート問題へ:内部globals.pyget_current()サイトからアプリと呼ばれ、サイトアプリは、models.pyをインポートします。globals.pyからのインポートがあります。

EDIT:

アプリケーションは、この円形輸入問題に遭遇することなく、完璧に動作します。シェルからglobals.pyをインポートしても問題はありません。コマンドでさえ、manage.pyを呼び出すことなくシェルから実行できます。

なぜ、manage.py some_commandが循環インポートによって失敗しますか?

ありがとうございます。

答えて

1

SITE_DOMAINとSITE_NAMEをglobals.pyに保存する特別な理由はありますか?これらは既にサイトフレームワークから直接入手できます。

the docsによれば、サイトオブジェクトは初めてアクセスするときにキャッシュされるため、インポートしてそのまま使用すると傷つくことはありません。

+0

globals.pyの文字列定数の中には、このようなものがあります(例:WELCOME_STRING = 'Welcome to'%SITE_NAME – shanyu

+0

Lol、welcome string constant)。また、あなたのビューのいくつかをglobals.pyに書いていますか? http://www.c2.com/cgi/wiki?GlobalVariablesAreBad – drozzy

+0

@drozzy "globals.py"は、翻訳される文字列の単なるコンテナです。これは、 "settings.py"より "グローバル"ではありません。その名前で予告しないでください;) – shanyu

関連する問題