从django settings.py中包含local_settings.py时,如何修改DATABASES变量

时间:2011-04-08 23:11:52

标签: django django-settings

在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设置,我只想调整主机(指向另一台服务器)。

4 个答案:

答案 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'))