2016-05-19 11 views
0

からカスタム変数をインポートすることはできません:今ジャンゴ:私はsettings.pyでカスタム変数<code>mongo_db</code>定義された設定

# connect to test database for tests and real database otherwise 
if is_test(): 
    mongo_db = mongoengine.connect(db='test-workflows', host='workflows-mongo') 
else: 
    mongo_db = mongoengine.connect(db='workflows', host='workflows-mongo') 

を、私はtests.py(またはpython manage.py shellから)からそれをインポートしようとしています、どちらも失敗しました:

from django.conf import settings 
settings.mongo_db 
AttributeError: 'Settings' object has no attribute 'mongo_db' 

何が問題なのですか。

UPDATE: IIRC、Djangoはデフォルトの設定がsettings.pyで定義された値、とdjango.conf.global_settingsオブジェクトオーバーライドすることでdjango.conf.settingsを構築します。

したがって、from django.conf import settings; settings.mongo_dbでは、django.conf.settingsmongo_dbで更新されないことがあります。これは、デフォルトオプションの中にはありません。

また、Django documentation saysことdjango.conf.settingsオブジェクト、ないモジュールあるので、あなたはfrom django.conf.settings import VARIABLEを言うことはできません。幸いにも、私はそれをやっていません。

答えて

0

あなたはジャンゴguidelinesを、次のされていないため、インポートが失敗している

from your_app import settings 
+1

ありがとうございます。 「ワークフローのインポート設定」から使用され、機能しました。 9分で答えを受け入れるでしょう –

+2

また、あなたは私が見ることのできる設定から実際の接続を行っていました。設定には適していないかもしれません。設定では、実際のデータベース接続を開始する代わりに静的情報を格納する必要があります。あなたは '{db: 'test-workflows'、 'host': 'workflows-mongo'}'のような辞書を保存し、 'test.py'に' connect() 'を実行することができます。 –

+0

@ ShangWangこれは一般的にいい考えですが、どこかに格納されたmongodbへのグローバルな接続プールが必要です。 'views.py'、' test.py'(そして 'manage.py shell'の中で)で初期化することは適切ではありません。私はそのようなグローバルな目的のために良い場所を考えることはできません。 –

1

from django.conf import settings 

があるべき自分自身のsettings.py Djangoの設定からインポートしようとしていません。

独自の設定を作成します。

  1. 設定名はすべて大文字でなければなりません。
  2. 既存の設定を再作成しないでください。

コードは、global_settingsまたは独自の設定ファイルからインポートしないでください。

django.conf.settingsは、デフォルト設定とサイト固有の設定の概念を抽象化しています。それは単一のインタフェースを提示する。

コードをsettings.pyで次のように変更します。

if is_test(): 
    MONGO_DB = mongoengine.connect(db='test-workflows', host='workflows-mongo') 
else: 
    MONGO_DB = mongoengine.connect(db='workflows', host='workflows-mongo') 

は今、あなたはDjangoのシェルから、他のすべての場所からインポートすることができます(MONGO_DBmongo_dbを交換してください)。

関連する問題