Ubuntu+VSCode+Django环境下os.getenv无法读取.env变量求助
解决Django中os.getenv读取.env变量失败的问题
核心原因:你手动在终端执行命令时,当前shell会话没有加载到.env文件里的环境变量,VSCode的DotENV扩展仅对编辑器内置的任务、调试进程生效,无法覆盖手动打开的终端会话。以下是不用python_dotenv的解决办法:
方法1:临时加载.env到当前终端会话
在激活虚拟环境并进入项目目录后,执行以下命令加载.env文件:
source .env
注意:.env文件需放在当前执行命令的目录下(可根据实际路径调整source的文件路径),且.env里的变量格式要正确,示例:
ALLOWED_HOSTS="localhost 127.0.0.1"
这种方式仅对当前终端窗口有效,关闭终端后需重新执行。
方法2:让终端自动加载.env(持久化)
如果不想每次手动执行source,可以配置终端启动脚本自动加载项目的.env文件:
- 若使用bash,编辑
~/.bashrc文件,添加一行:
保存后执行source /absolute/path/to/your/project/.envsource ~/.bashrc使配置生效。 - 若使用zsh,编辑
~/.zshrc文件,添加同样的source命令,再执行source ~/.zshrc生效。
方法3:在settings.py中添加兜底默认值
直接修改settings.py代码,给os.getenv设置默认值,避免因变量未加载导致报错:
ALLOWED_HOSTS = os.getenv('ALLOWED_HOSTS', 'localhost 127.0.0.1').split(' ')
这样即使环境变量没加载,Django也会使用默认的允许主机列表,不影响开发流程。
内容的提问来源于stack exchange,提问作者Арсений Зорькин
相关产品推荐
相关产品推荐

