在 Django 世界中,在 settings.py
末尾导入本地环境设置覆盖文件似乎是相对正常的,如下所示:
from settings_local.py import *
这有几个问题,对我来说最值得注意的是您无法检查或修改基本设置,只能覆盖它们 - 随着时间的推移,这会导致一些痛苦的重复和头痛。
相反,从本地文件导入 init 函数并注入 globals()
的输出以允许该本地文件更智能地读取和修改设置有什么问题吗?
settings.py:
from settings_local.py import init
init( globals() )
settings_local.py:
def init( config ):
config['INSTALLED_APPS'].append( 'some.app' )
这似乎解决了与使用import *
相关的许多问题,但我想知道这是否是一个坏主意,原因我还不知道。
处理此问题的更常见和可读的方法是使用多个设置文件,其中将所有常见设置放在一个模块中,并将其导入到特定于环境的设置文件的开头:
settings
__init__.py
base.py
development.py
staging.py
production.py
这允许您引用您所指的突变:
# base.py
INSTALLED_APPS = [
'foo',
'bar'
]
# development.py
from .base import *
INSTALLED_APPS += [
'debug_toolbar'
]
然后,使用DJANGO_SETTINGS_MODULE=settings.development
在本地运行应用