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

时间:2015-05-03 15:13:47

标签: 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'])

仍然显示完整错误。

6 个答案:

答案 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))))