使用globals()来增强django设置

时间:2017-01-13 19:11:44

标签: python django

在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 *相关的一些问题,但我想知道这是一个坏主意,原因我还不知道。

1 个答案:

答案 0 :(得分:0)

处理此问题的更常见和可读的方法是拥有多个设置文件,您可以将所有常用设置放在一个模块中,然后将其导入特定于环境的设置文件的开头:

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

在本地运行您的应用