我正在尝试创建一个动态定义的设置对象,通常您会使用该格式
base_settings.py :
MY_VAR = 1
my_settings.py :
from base_settings import *
assert MY_VAR == 1
但是,在这种情况下,我希望base_settings
是一个字符串,它定义了通往不同设置模块的路径。例如,我可能还有其他基本设置文件:
base_settings1.py :
MY_VAR = 1
base_settings2.py :
MY_VAR = 2
my_settings.py :
import os
base_settings = os.environment['SETTINGS_MODULE'] # This is "base_settings2" for the example
from magic(base_settings) import *
assert MY_VAR == 2
我知道您可以使用importlib.import_module(path)
进行导入,但是这会将导入的代码返回到特定变量中,而不是“爆炸”到具有原始变量名称的导入文件中。
答案 0 :(得分:1)
您可以修改locals
命名空间,尽管实际上不建议这样做:
mod_name = os.environment['SETTINGS_MODULE']
locals().update({
k: v for k, v in importlib.import_module(mod_name).__dict__.items()
if not k.startswith('_')
})
这会将添加到您的本地(模块)变量的设置模块中找到的变量。
但是,建议您将对话保持在封闭状态。