当我使用os.environ时,Django忽略了DEBUG值,为什么?

Gly*_*son 4 python django

在我的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)

  • @GlynJackson Python不会将环境变量解析为Python对象,它只是将它们作为字符串.如果将环境变量`DEBUG_VALUE`设置为`True`,`os.environ ['DEBUG_VALUE']`将返回字符串''True'`,而不是布尔值`True` (2认同)
  • @GlynJackson` ==`是相等运算符,此运算的结果是"True"或"False"所以`DEBUG = os.environ ['DEBUG_VALUE'] =='TRUE'表示`os.environ [ 'DEBUG_VALUE']`等于字符串''True',然后`DEBUG`变量设置为'True`,否则设置为'False`. (2认同)

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 经验的项目,它都是一个很好的起点。


dsa*_*laj 5

也许你想要一些更宽容的东西。首先允许出于开发目的进行本地定义。并且仅当未定义时,才从环境变量中获取它,但使用不区分大小写的比较(因为进行部署的人可能不是编写这行代码的开发人员)。

try:
    DEBUG = DEBUG_VALUE_LOCAL
except NameError:
    DEBUG = os.environ.get('DEBUG_VALUE').lower() == 'true'
Run Code Online (Sandbox Code Playgroud)