Django执行runserver时settings/base.py文件重复加载两次如何解决
问题产生原因
- 核心是
base.py被重复导入:绝大多数分环境的Django配置结构中,dev.py、prod.py会预先导入base.py继承公共配置,这是第一次加载base.py;而你的settings/__init__.py在导入完dev.py/prod.py后,又单独执行了from .base import *,触发了第二次加载。 - 特殊情况:如果修复导入逻辑后开发环境仍出现两次打印,属于Django开发模式的正常表现:
runserver默认会启动两个进程,一个处理请求,一个监听代码变更实现热重载,生产环境正式启动时不会有该问题,不会拖慢运行速度。
对应解决办法
你可以任选以下一种方案修改:
- 方案一:保留
dev.py/prod.py中导入base.py的逻辑,直接删除settings/__init__.py末尾的from .base import *语句即可,避免重复导入。 - 方案二:先移除
dev.py、prod.py中对base.py的导入语句,再调整settings/__init__.py的导入顺序,优先导入公共配置,再用环境专属配置覆盖公共配置,修改后的__init__.py代码如下:
import os from dotenv import load_dotenv load_dotenv() # 先加载全局公共配置 from .base import * # 再加载对应环境的专属配置,自动覆盖base中同名配置项 if os.environ['ENV_SETTING'] =='prod': from .prod import * else: from .dev import *
内容的提问来源于stack exchange,提问作者Trọng Nhân
相关产品推荐
相关产品推荐

