3

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

4

4 回答 4

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 关于嵌套字典的评论更改了我的代码。

于 2011-04-09T17:21:57.183 回答
0

在 local_settings.py 中试试这个:

import settings

settings.DATABASES['default']['HOST'] = 'my_host'

希望这可以帮助!

于 2011-04-08T23:38:34.047 回答
0

您可以使用execfile()而不是导入。这使您可以访问 settings.py 范围内的所有内容:

execfile(os.path.join(os.path.dirname(__file__), 'local_settings.py'))
于 2011-04-09T15:08:07.577 回答
0

from local_settings import *通常我会反转它,因此 settings.py 会覆盖 settings.py顶部的local_settings.py 。通常 db 设置是基于位置的设置,即 dev db 用于开发工作,实际上不会将 db 设置添加到 settings.py。在我看来,settings.py 应该定义项目运行的每个位置所需的设置,并且不应该被子集覆盖。

于 2011-04-08T23:45:43.383 回答