2016-11-28 3 views
0

私は設定を保存するPythonモジュールを持っていますsettings.py。このファイルには、私は、ユーザーが、例えば、これらの設定を上書きできるようにしたい他のモジュール変数を使用するPythonのモジュール変数をオーバーライドします

BASE_DIR = os.path.dirname(os.path.dirname(__file__)) 
BASE_URL = 'https://my-base-url.com/test' 
... 
SCORM_TEST_URL = BASE_URL + '/scorm2004testwrap.htm' 

ような行が含まれていますコマンドラインオプションまたは環境変数を使用します。私は

import settings 
settings.BASE_URL = 'test' 

を行うとき、それはしかし、

settings.SCORM_TEST_URL 
#will print https://my-base-url.com/test/scorm2004testwrap.htm 

が上書きされた値でこれらの従属変数を更新するためのpythonを伝える方法があり、直接変数の割り当てに適していますか?または、私はあなたが上記の例でosのような他のpythonモジュールのインポートを必要とするかもしれないので、私は自分のプログラムを設計して、設定を上書きし、Pythonモジュールであるファイルの変数を設定できるようにしますか?これはあなたがsetting.BASE_URL = somethingを設定すると、そのビーイングは今何かに再割り当て

なんとかものではありませんし、それが動作するように、前回どのような値がなくなっているよう

答えて

0

は思えます。

しかしSCORM_TEST_URLが古いBASE_URL値に基づいて作成され、そのあなたが新しいBASE_URL値に基づいて、それを再評価しない限り、BASE_URLSCORM_TEST_URLに反映されません変更し、そのcreated.Thus一度BASE_URLとは関係ありません。

いくつかの回避策私は以下のように考えることができますが、通常のように外部モジュールを変更する必要がある変数を宣言します。

更新機能の内部で更新する必要がある変数の別のセットを入れて、他のモジュールからのsettings.py

BASE_URL = 'https://my-base-url.com/test' 
# ... other var 

def update_var(): 
    global SCORM_TEST_URL 
    SCORM_TEST_URL = BASE_URL + '/scorm2004testwrap.htm' 
    # added other var accordingly 

内部グローバル

としてそれらを作る、通常の

​​としてインポート設定
関連する問題