我在gcloud Ubuntu 18.04上运行Django。
每次我尝试设置环境变量而不是字符串时,我都会得到一个错误,但是当我从shell使用echo或os.environ.get()时,它工作得很好。
网站settings.py
... #this settings doest work
DB_NAME = os.environ.get("DB_NAME")
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': DB_NAME,#
...
}
}
...
... #this settings works fine
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': "Candlelight",
...
}
}
从bash
~/myproject$ echo $DB_NAME
Candlelight
来自壳体
>>> import os
>>> os.environ.get('DB_NAME')
'Candlelight'
>>>
>>> from core.settings import *
>>> DB_NAME
'Candlelight'
>>>
.巴什尔茨
export DB_NAME = "Candlelight"
3条答案
按热度按时间huwehgph1#
试着给予你想要得到的变量一个默认值:
如果
just_a_test
打印,则意味着无法从settings.py
访问环境变量。我不确定你所面临的问题(可能是很多问题,尤其是在使用
Docker
的时候),但是我会和你分享我现在是如何管理env
变量的,这些变量只对一个Django
项目有用,我从来没有遇到过这样的问题。首先,安装
python-dotenv
:然后,在项目的根目录下创建一个
.env
文件,该文件将包含所有您希望用于项目的有用环境变量:最后,在您的
settings.py
中使用该变量(作为良好的实践,总是为您的变量赋予一个默认值):主要利益的那条路要做到:
.bashrc
文件(以及你的会话的全局环境),.env
文件中,如果处理git
repo,则很容易忽略这个文件。apache2
或nginx
的设置,因为Django
无论如何都会查找那个.env
文件。对我来说,这是处理
Django
项目环境变量的最好、最干净的方法!bn31dyow2#
您没有从设置env变量的同一个shell运行django(您的用户shell运行
.bashrc
,但apache没有)尝试在
/etc/apache2/envvars
下添加环境变量并重新启动apache服务。然后当运行django时,应该会看到env-var设置。
另外,设置环境变量时不要有空格,这一点很重要,它应该是:
r8xiu3jd3#
LeLouch给出了解决方案,但没有人发布代码或示例。我目前在使用Django 4和Linux时遇到了这个问题,并试图访问系统环境变量。要使用系统变量,只需 Package str(os.environ.get(secret_key))..所以在设置文件中,它将如下所示..
在settings.py文件中:
秘密密钥=字符串(操作系统环境获取(秘密密钥))
您必须使用str(os.environ.get()),使用str(os.environ [′ DJANGO_SECRET_KEY ′])不起作用,或者对我来说不起作用。
我回答这个问题的唯一原因是因为所有其他的在www.example.com文件所在的目录下创建一个文件settings.py并以这种方式访问它们的解决方案都没有意义。如果有人可以访问settings.py文件,那么他们也可以访问配置文件。完全在Django系统之外似乎是处理环境变量的最好方法。