在我的Django设置中,我有以下内容:
DEBUG = os.environ ['DEBUG_VALUE']
哪里 DEBUG_VALUE = False
但是,当我这样做时,Django继续显示完整的错误消息.如果我手动添加DEBUG = False它工作,并显示500错误.
出于某种原因,Django在使用该os.environ值时忽略了它.
我确认DEBUG_VALUE是False但输出到文件.
我甚至尝试过:
DEBUG = bool(os.environ ['DEBUG_VALUE'])
并仍显示完整错误.
aum*_*umo 17
值os.environ['DEBUG_VALUE']是一个字符串和bool('non empty string') == True.
你应该做类似的事情:
DEBUG = os.environ['DEBUG_VALUE'] == 'TRUE'
Run Code Online (Sandbox Code Playgroud)
thc*_*ark 12
这个django-environ包有一种简单的管理方法,我认为它比手动解析字符串值(它总是评估为真)更健壮和优雅 - 您可以将您的环境作为对象导入。
导出环境变量并安装包:
export MY_DEBUG_ENV_VAR=False
pip install django-environ
Run Code Online (Sandbox Code Playgroud)
然后在 django 中,将环境作为 Env() 对象导入,并使用 bool() 方法解析布尔值并提供可选的默认值:
import environ
env = environ.Env()
MY_DEBUG_ENV_VAR = env.bool('MY_DEBUG_ENV_VAR', default=False)
Run Code Online (Sandbox Code Playgroud)
多田!Env() 对象还有一堆其他方法(例如,用于解析整数、浮点数、字符串等)。
注意,我通过 django-cookiecutter 应用程序发现了这一点,该应用程序预装了许多同样有用的东西,无论您是新手还是有 django 经验的项目,它都是一个很好的起点。
也许你想要一些更宽容的东西。首先允许出于开发目的进行本地定义。并且仅当未定义时,才从环境变量中获取它,但使用不区分大小写的比较(因为进行部署的人可能不是编写这行代码的开发人员)。
try:
DEBUG = DEBUG_VALUE_LOCAL
except NameError:
DEBUG = os.environ.get('DEBUG_VALUE').lower() == 'true'
Run Code Online (Sandbox Code Playgroud)