在我的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'])
仍然显示完整错误。
答案 0 :(得分:10)
os.environ['DEBUG_VALUE']
的值是一个字符串bool('non empty string') == True
。
你应该做类似的事情:
DEBUG = os.environ['DEBUG_VALUE'] == 'TRUE'
答案 1 :(得分:4)
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()对象还有许多其他方法(例如,用于解析整数,浮点数,字符串等)。
NB我发现这个虽然是django-cookiecutter应用程序,它预装了一堆同样有用的东西,无论你是django的新手还是经验,都是项目的一个很好的起点。
答案 2 :(得分:1)
也许你想要更宽容的东西。首先允许本地定义用于开发目的。并且只有在未定义的情况下,从环境变量中获取它,但使用不区分大小写的比较(因为执行部署的人可能不是编写此行代码的开发人员)。
try:
DEBUG = DEBUG_VALUE_LOCAL
except NameError:
DEBUG = os.environ.get('DEBUG_VALUE').lower() == 'true'
答案 3 :(得分:1)
或者,如果您使用1/0值,则可以用int(String)求值,而不是对环境变量使用True / False:
# Set DEBUG flag. Default is 0 (considered as False in conditions)
DEBUG = int(os.environ.get('DEBUG_VALUE', 0))
答案 4 :(得分:1)
我认为,另一种解决方案最好是使用strtobool
中的distutils.util
在python 3及更高版本中
#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']))
答案 5 :(得分:0)
我知道这是一篇旧帖子,但是当我使用 .env 并将 DEBUG 变量设置为 0 或 1 时,这总是对我有用。
DEBUG = (bool(int(os.environ.get('DEBUG',1))))