我正在尝试创建一个动态定义的设置对象,通常您会使用格式base_settings.py:MY_VAR = 1my_settings.py:from base_settings import *assert MY_VAR == 1但是在这种情况下,我想成为一个字符串,定义不同设置模块的路径。例如,我可能有其他的基本设置文件:base_settingsbase_settings1.py:MY_VAR = 1base_settings2.py:MY_VAR = 2my_settings.py:import osbase_settings = os.environment['SETTINGS_MODULE'] # This is "base_settings2" for the examplefrom magic(base_settings) import *assert MY_VAR == 2我知道你可以导入,但是这会将导入的代码返回到特定变量中,而不是“分解”到具有原始变量名称的导入文件中。importlib.import_module(path)
1 回答
红颜莎娜
TA贡献1842条经验 获得超12个赞
您可以修改命名空间,尽管它实际上并不推荐: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('_')
})
这将向您添加设置模块中找到的本地(模块)变量。
但是,强烈建议将禁闭器保持在封闭的物体中。
添加回答
举报
0/150
提交
取消