Windows下VS Code运行Django无法读取.env文件中DATABASE_URL变量
Windows下Django配置PostgreSQL环境变量失效解决办法
问题背景
首次配置PostgreSQL连接并使用虚拟环境变量,已在settings目录和manage.py同级目录放置内容一致的.env文件,但运行manage.py runserver时始终提示缺少DATABASE_URL变量。尝试将.env移至虚拟环境目录、手动执行set DATABASE_URL='postgres://username:password@localhost:5432/authors-live'命令均无效。
当前目录结构
MASTERDJANGOWITHDOCKER ├─ env (虚拟环境文件夹) └─ authors-src ├─ manage.py ├─ .env └─ authors_api └─ settings ├─ base.py └─ .env
相关代码
settings/base.py
import environ from pathlib import Path env = environ.Env() ROOT_DIR = Path(__file__).resolve().parent.parent.parent # 定位到manage.py所在层级 # 指定应用存储目录 APPS_DIR = ROOT_DIR / 'core_apps' BASE_DIR = Path(__file__).resolve().parent.parent DATABASES = { 'default': env.db('DATABASE_URL') }
.env文件内容
DATABASE_URL='postgres://username:password@localhost:5432/authors-live' DJANGO_SECRET_KEY="django-insecure"
报错信息
... File "C:\Python39\lib\os.py", line 679, in __getitem__ raise KeyError(key) from None KeyError: 'DATABASE_URL' ... File "C:\Users\...\authors-haven-api\authors-src\env\lib\site-packages\environ\environ.py", line 371, in get_value raise ImproperlyConfigured(error_msg) django.core.exceptions.ImproperlyConfigured: Set the DATABASE_URL environment variable
解决办法
1. 核心修复:添加.env文件加载逻辑
environ库不会自动读取.env文件,必须手动调用env.read_env()方法指定文件路径。修改settings/base.py,在初始化env后添加加载代码:
import environ from pathlib import Path env = environ.Env() ROOT_DIR = Path(__file__).resolve().parent.parent.parent # 定位到manage.py所在层级 # 加载manage.py同级的.env文件 env.read_env(ROOT_DIR / '.env') APPS_DIR = ROOT_DIR / 'core_apps' BASE_DIR = Path(__file__).resolve().parent.parent DATABASES = { 'default': env.db('DATABASE_URL') }
2. 修正.env文件格式
Windows环境下,环境变量值不要用单/双引号包裹,避免解析异常,修改后的.env内容:
DATABASE_URL=postgres://username:password@localhost:5432/authors-live DJANGO_SECRET_KEY=django-insecure
3. 确保虚拟环境正确激活
运行命令前必须激活虚拟环境:
cd MASTERDJANGOWITHDOCKER\env\Scripts activate cd ..\..\authors-src python manage.py runserver
4. 手动设置环境变量的正确方式(备用)
若.env加载仍有问题,激活虚拟环境后执行以下命令(去掉引号):
set DATABASE_URL=postgres://username:password@localhost:5432/authors-live
内容的提问来源于stack exchange,提问作者justin107d
相关产品推荐
相关产品推荐

