Windows环境下Django无法读取DJANGO_DEVELOPMENT_MODE环境变量求助
解决Django无法读取Windows环境变量DJANGO_DEVELOPMENT_MODE的问题
问题背景
部署Django到DigitalOcean App Platform时采用官方示例的settings.py配置,在Windows开发环境中已设置DJANGO_DEVELOPMENT_MODE用户及系统环境变量,但启动开发服务器时仍进入生产分支,抛出DATABASE_URL environment variable is not set异常。Python shell中能正常读取该变量,但Django进程无法获取。
解决方案
1. 重启终端/开发环境
Windows系统中,新设置的环境变量不会自动加载到已打开的终端或IDE进程中。必须重启你的终端(CMD/PowerShell)或开发工具(VS Code、PyCharm等),再重新运行python manage.py runserver。
2. 终端会话临时设置变量
如果不想重启终端,可以在当前会话中直接设置变量:
- CMD中执行:
set DJANGO_DEVELOPMENT_MODE=True - PowerShell中执行:
$env:DJANGO_DEVELOPMENT_MODE = "True"
执行完后在同一个终端内启动Django服务器。
3. 优化settings.py中的变量判断逻辑
Windows环境变量的读取可能存在大小写或空格问题,修改判断语句为更鲁棒的写法:
import os import sys ... # Database配置部分修改为: if os.getenv('DJANGO_DEVELOPMENT_MODE', 'False').strip().lower() == 'true': DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': BASE_DIR / 'db.sqlite3', } } elif len(sys.argv) > 0 and sys.argv[1] != 'collectstatic': if os.getenv('DATABASE_URL', None) is None: raise Exception('DATABASE_URL environment variable is not set') DATABASES = { 'default': dj_database_url.parse(os.environ.get('DATABASE_URL')), }
这种写法能兼容变量值为True、true、TRUE甚至带空格的True等情况。
4. 检查IDE运行配置
如果使用IDE启动Django,需确认IDE的运行配置中:
- 没有手动覆盖
DJANGO_DEVELOPMENT_MODE变量 - 已勾选"继承系统环境变量"选项(不同IDE位置不同,比如PyCharm在"Run/Debug Configurations"的"Environment variables"中)
内容的提问来源于stack exchange,提问作者Omid Shojaee
相关产品推荐
相关产品推荐

