在settings.py的顶部,我有:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'dbname',
'USER': 'dbuser',
'PASSWORD': 'pw'
'HOST': '',
'PORT': '',
}
}
在底部,我有:
try:
from local_settings import *
except ImportError:
pass
在local_settings.py中,我想修改settings.py文件中定义的DATABASES ['default'] ['host']。
这可能吗?如果是这样,怎么样?我不想复制整个DATABASES设置,我只想调整主机(指向另一台服务器)。
答案 0 :(得分:2)
在settings.py
。
try:
from local_settings import *
for k,v in _DATABASES:
if k in DATABASES:
DATABASES[k].update(v)
else:
DATABASES[k] = v
except ImportError:
pass
在local_settings.py
。
_DATABASES = {"default":{"HOST":"new_host"}}
编辑:注意我已根据@ saverio关于嵌套字典的评论更改了我的代码。
答案 1 :(得分:0)
在local_settings.py中尝试:
import settings
settings.DATABASES['default']['HOST'] = 'my_host'
希望这有帮助!
答案 2 :(得分:0)
通常我会将其反转,因此settings.py会覆盖settings.py顶部的local_settings.py from local_settings import *
。通常,数据库设置是基于位置的设置,即开发工作的dev db,并且实际上不会将数据库设置添加到settings.py.在我看来,settings.py应该定义项目运行的每个位置都需要的设置,不应该被子集覆盖。
答案 3 :(得分:0)
您可以使用execfile()
代替导入。这使您可以访问settings.py范围内的所有内容:
execfile(os.path.join(os.path.dirname(__file__), 'local_settings.py'))