使用 globals() 来增强 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 *相关的许多问题,但我想知道这是否是一个坏主意,原因我还不知道。

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

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在本地运行应用

最新更新