在Django项目中,每个App里放一个settings.py并不是标准做法,Django的设计是项目根目录下一个全局的settings.py。如果你想让每个App有自己的配置,可以这样处理:
方案一:使用Django的AppConfig(推荐)
在每个App的apps.py中定义配置:
# myapp/apps.py
from django.apps import AppConfig
class MyAppConfig(AppConfig):
name = 'myapp'
verbose_name = "我的应用"
# App特定配置
MYAPP_SETTING_1 = 'value1'
MYAPP_SETTING_2 = 100
def ready(self):
# 初始化代码
pass
然后在__init__.py中设置:
# myapp/__init__.py
default_app_config = 'myapp.apps.MyAppConfig'
方案二:创建配置模块
在每个App下创建config.py:
# myapp/config.py
SETTINGS = {
'FEATURE_ENABLED': True,
'MAX_ITEMS': 50,
'API_TIMEOUT': 30,
}
在需要的地方导入:
from myapp.config import SETTINGS
value = SETTINGS['MAX_ITEMS']
方案三:使用django-constance(动态配置)
如果需要运行时修改配置:
pip install django-constance
# settings.py
INSTALLED_APPS = [
'constance',
]
CONSTANCE_CONFIG = {
'MYAPP_SETTING': ('default_value', '描述'),
}
为什么不用多个settings.py:
- Django的配置系统是全局单例的
- 多个settings.py会导致配置分散,难以管理
- 环境变量、部署配置会变得复杂
实际项目中的做法:
# 在全局settings.py中组织App配置
MYAPP_CONFIG = {
'option1': True,
'option2': 'value',
}
ANOTHER_APP_CONFIG = {
'setting': 100,
}
然后在App中通过from django.conf import settings访问:
config = settings.MYAPP_CONFIG
一句话建议: 用AppConfig或独立config模块代替多个settings.py文件。