Django os.environを使用するときにDEBUG値を無視するのはなぜですか?

Source python django

私のDjango設定には、次のものがあります。

DEBUG = os.environ['DEBUG_VALUE']



ここでDEBUG_VALUE = False
ただし、これを行うと、Djangoは引き続き完全なエラーメッセージを表示します。 DEBUG = Falseを手動で追加すると、機能し、500エラーが表示されます。

何らかの理由で、os.environ値を使用すると、Djangoはそれを無視します。
DEBUG_VALUEがFalseであることを確認しましたが、ファイルに出力しています。

私も試しました:

DEBUG = bool(os.environ['DEBUG_VALUE'])



それでも完全なエラーが表示されます。
推奨答え
os.environ['DEBUG_VALUE']の値は、文字列とbool('non empty string') == Trueです。

次のようなことを行う必要があります。
DEBUG = os.environ['DEBUG_VALUE'] == 'TRUE'
その他答え #1
django-environパッケージには、これを管理する簡単な方法があり、文字列値を手動で解析するよりも堅牢でエレガントだと思います(常にtrueと評価されます)。環境をオブジェクトとしてインポートできます。

環境変数をエクスポートし、パッケージをインストールします。
export MY_DEBUG_ENV_VAR=False
pip install django-environ

次に、djangoで、環境をEnv()オブジェクトとしてインポートし、bool()メソッドを使用してブール値を解析し、オプションのデフォルト値を指定します。
import environ
env = environ.Env()
MY_DEBUG_ENV_VAR = env.bool('MY_DEBUG_ENV_VAR', default=False)

多田! Env()オブジェクトには、他にもたくさんのメソッドがあります(たとえば、整数、浮動小数点数、文字列などの解析用)。

注意:これはdjango-cookiecutterアプリケーションで見つかりました。このアプリケーションには、同様に便利なものがたくさんプリインストールされており、djangoを初めて使用する場合でも、経験がある場合でも、プロジェクトの開始点として最適です。
その他答え #2
たぶんあなたはもっと寛容な何かが欲しいでしょう。まず、開発目的でローカル定義を許可します。また、定義されていない場合にのみ、環境変数から取得しますが、大文字と小文字を区別しない比較を使用します(デプロイメントを行う人は、このコード行を作成する開発者ではない可能性があるため)。
try:
    DEBUG = DEBUG_VALUE_LOCAL
except NameError:
    DEBUG = os.environ.get('DEBUG_VALUE').lower() == 'true'
その他答え #3
または、環境変数にTrue / Falseの代わりに1/0値を使用する場合は、int(String)を使用して評価できます。
# Set DEBUG flag. Default is 0 (considered as False in conditions)
DEBUG = int(os.environ.get('DEBUG_VALUE', 0)) 
その他答え #4
別の解決策は、私の意見では、strtobooldistutils.utilを使用することです。
python3以降の場合
#import distutls 
# if you using python version > 3 use from distutils import strtobool
from distutils.util import strtobool 

_DEBUG = bool(strtobool(os.environ['DEBUG_MODE']))

関連記事

j_C#_jdatetimeオブジェクトをiso8601文字列に変換します
数字のbashカウント数
Python:dir()を使用してimported moduleで定義されたclassesのみを取得しますか?
パッケージのインストール時のPythonpipsegfault
無効なブロックタグ: 'endblock'。このタグを登録またはロードするのを忘れましたか?