如何在django应用程序中使用在venv bash中创建的变量?

如何在django应用程序中使用在venv bash中创建的变量?,django,bash,heroku,environment-variables,development-environment,Django,Bash,Heroku,Environment Variables,Development Environment,如果我像这样在我的venv中创建一个变量 DJANGO_SERVER_TYPE=local 在heroku我有 DJANGO_SERVER_TYPE=production 为什么我的系统无法识别这一点 from .base import * import os if os.environ['DJANGO_SERVER_TYPE'] == 'local': try: from .local import * except: pass if os

如果我像这样在我的venv中创建一个变量

DJANGO_SERVER_TYPE=local
在heroku我有

DJANGO_SERVER_TYPE=production
为什么我的系统无法识别这一点

from .base import *
import os
if os.environ['DJANGO_SERVER_TYPE'] == 'local':
    try:
        from .local import *
    except:
        pass

if os.environ['DJANGO_SERVER_TYPE'] == 'production':
    try:
        from .production import *
    except:
        pass
我一直在犯这个错误

File "/Users/ray/Desktop/myheroku/practice/src/gettingstarted/settings/__init__.py", line 3, in <module>
    if os.environ['DJANGO_SERVER_TYPE'] == 'local':
    File "/Users/ray/Desktop/myheroku/practice/bin/../lib/python3.5/os.py", line 683, in __getitem__
    raise KeyError(key) from None
    KeyError: 'DJANGO_SERVER_TYPE'
File”/Users/ray/Desktop/myheroku/practice/src/gettingstarted/settings/________.py“,第3行,在
如果os.environ['DJANGO_SERVER_TYPE']=“local”:
文件“/Users/ray/Desktop/myheroku/practice/bin/。/lib/python3.5/os.py”,第683行,在__
从“无”提升钥匙错误(钥匙)
KeyError:“DJANGO\u服务器\u类型”

如何使用我创建的局部变量?

问题是您的环境变量在本地不存在。有很多方法可以在本地设置环境变量

我强烈建议使用Kenneth Reitz编写的。这是一个很酷的工具,您可以在计算机上本地安装。有关更多信息,请参阅

它的工作方式是在项目目录中定义一个名为
.env
的文件,并在其中列出所有环境变量。例如:

export DJANGO_SERVER_TYPE=local
每次您在命令行上输入该目录(如
cd~/my\u project
),autoenv都会自动将该文件夹中的任何环境变量设置为活动。它非常有用

无论如何,无论您当前在何处存储环境变量,如果不想使用autoenv之类的工具,您都需要导出它们

假设您有一个文件(
env.sh
),其中定义了环境变量,如下所示:

DJANGO_SERVER_TYPE=local
您可以通过说
sh env.sh
来“运行”此文件。现在,您可能希望它能够运行,并且您现在可以在环境变量中定义
DJANGO_SERVER_类型
,对吗

嗯,不完全是这样

sh
(此处实际使用的脚本语言)中,如果希望将变量导出到运行脚本之外,则需要将
export
关键字放在变量前面

因此,为了实际设置变量,您必须说:

export DJANGO_SERVER_TYPE=local
然后将该文件作为脚本运行:
sh env.sh
。如果这样做,您会注意到现在您的环境变量实际上已经设置好了

在测试时要知道的另一件有用的事情是,如果在命令行上运行
env
命令,它将输出当前在本地设置的所有环境变量的列表。这对于调试非常有用,例如:

env | grep DJANGO_

问题是您的环境变量在本地不存在。有很多方法可以在本地设置环境变量

我强烈建议使用Kenneth Reitz编写的。这是一个很酷的工具,您可以在计算机上本地安装。有关更多信息,请参阅

它的工作方式是在项目目录中定义一个名为
.env
的文件,并在其中列出所有环境变量。例如:

export DJANGO_SERVER_TYPE=local
每次您在命令行上输入该目录(如
cd~/my\u project
),autoenv都会自动将该文件夹中的任何环境变量设置为活动。它非常有用

无论如何,无论您当前在何处存储环境变量,如果不想使用autoenv之类的工具,您都需要导出它们

假设您有一个文件(
env.sh
),其中定义了环境变量,如下所示:

DJANGO_SERVER_TYPE=local
您可以通过说
sh env.sh
来“运行”此文件。现在,您可能希望它能够运行,并且您现在可以在环境变量中定义
DJANGO_SERVER_类型
,对吗

嗯,不完全是这样

sh
(此处实际使用的脚本语言)中,如果希望将变量导出到运行脚本之外,则需要将
export
关键字放在变量前面

因此,为了实际设置变量,您必须说:

export DJANGO_SERVER_TYPE=local
然后将该文件作为脚本运行:
sh env.sh
。如果这样做,您会注意到现在您的环境变量实际上已经设置好了

在测试时要知道的另一件有用的事情是,如果在命令行上运行
env
命令,它将输出当前在本地设置的所有环境变量的列表。这对于调试非常有用,例如:

env | grep DJANGO_

我对heroku了解不多,但如果您的设置是
DJANGO\u SERVER\u TYPE=production
,您可能希望尝试
export DJANGO\u SERVER\u TYPE=production
export
将使env变量在所有会话中都可用。@shangwang谢谢,但这不是问题我对heroku不太了解,但是如果您的设置是
DJANGO\u SERVER\u TYPE=production
,您可能想试试
export DJANGO\u SERVER\u TYPE=production
<代码>导出将使env变量在所有会话中都可用。@Shangwang谢谢,但这不是我heroku应用程序上的问题。它在上文中指出。但是谢谢你的回答,rry@nothiness,误读了你的问题。我刚刚更新了我的答案以反映它=)rdegges它在我的heroku应用程序上。它在上文中指出。但是谢谢你的回答,rry@nothiness,误读了你的问题。我刚刚更新了我的答案以反映它=)