settings.pyとデータベース以外の設定を保存して保存する場所を探しているときに、環境変数にenvironment.jsonを使用しました。私はsettings.pyでこれらをインポートします。Djangoの設定に環境変数を使用できません
私の環境で新しい値を変更または保存しようとすると、env
のsettings.py
は変更に気付かれません。おそらく、settings.pyがDjangoによって読み込まれた時間と回数です。
以下のような方法で私の環境変数を使用する方法はありますか?
# settings.py
import json
with open('/home/dotcloud/environment.json') as f:
env = json.load(f)
EMAIL_HOST = env.get('EMAIL_PORT', '500')
# views.py
import json
def site_configuration(request):
with open('/home/dotcloud/environment.json') as f:
env = json.load(f)
if request.method == 'POST':
os.environ['EMAIL_PORT'] = request.POST['email_port']
return render(request, ...)
# python manage.py shell demo
>>> import json
>>> with open('/home/dotcloud/environment.json') as f:
... env = json.load(f)
...
>>> project_settings.EMAIL_PORT
'500'
>>> env['EMAIL_PORT']
Traceback (most recent call last):
File "<console>", line 1, in <module>
KeyError: 'EMAIL_PORT'
>>> env['EMAIL_PORT'] = "123"
>>> env['EMAIL_PORT']
'123'
>>> project_settings.EMAIL_PORT
'500'
>>> project_settings.EMAIL_PORT == env['EMAIL_PORT']
False'
そうでない場合、どのように他の私は、私のDjangoプロジェクトでsettings.py
どこかで検索された変更の設定を保存することができますか?
シェルで 'putenv()'を使用しても、環境値は変更されません。 'putenv()'がサポートされている場合、 'os.environ'の項目への代入は' putenv() 'の対応する呼び出しに自動的に変換されます。しかし、 'putenv()'を呼び出すと 'os.environ'は更新されないので、実際にはos.environ'の項目に割り当てる方が望ましいです。"私は動的に設定を保存して変更する別の方法を見つけなければならないかもしれないと思います電子メール用。 – Kiwi
おっと...そうです、私はその部分を削除します。残りのアドバイスはまだ残っています:) – Wolph
ちょっと、少なくとも私はPythonで環境変数操作に関するいくつかの新しいことを学びました。 ;) – Kiwi