Django项目settings.py导入存在的SECRET.py变量仍加载本地配置问题
Django配置动态导入SECRET.py不生效问题解决方案
问题原因
- 核心原因是路径判断逻辑错误:
Path("SECRET.py")是基于Django运行时的工作目录(通常为项目根目录)查找文件,而非基于settings.py所在的目录查找。即便SECRET.py和settings.py处于同级目录,只要运行时工作目录不是该目录,就会判定文件不存在,进入本地配置分支。 - 次要排查点:路径修正后如果仍不生效,需确认SECRET.py中是否定义了
NAME、USER、PASSWORD、HOST、PORT这几个必填变量,且变量名拼写完全一致。
修复方案
先通过__file__变量获取当前settings.py的所在目录,再拼接SECRET.py的绝对路径做存在性判断,修正后代码如下:
from pathlib import Path # 获取当前settings.py文件的所在目录 SETTINGS_DIR = Path(__file__).resolve().parent # 拼接同目录下SECRET.py的绝对路径 SECRET_FILE = SETTINGS_DIR / "SECRET.py" if SECRET_FILE.is_file(): print("Live Database") from .SECRET import * else: print("Local Database") NAME = 'blog_db' USER = 'postgres' PASSWORD = 'admin' HOST = 'localhost' PORT = '5432' DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': NAME, 'USER': USER, 'PASSWORD': PASSWORD, 'HOST': HOST, 'PORT': PORT, } }
内容的提问来源于stack exchange,提问作者Anas Baheh
相关产品推荐
相关产品推荐

