我正在尝试创建一个动态定义的设置对象,通常使用该格式
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)
但是这会将导入的代码返回到特定变量中,而不是“爆炸”到具有原始变量名的导入文件中。
您可以修改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('_')
})
这会将添加到您的本地(模块)变量的设置模块中找到的变量。
但是,建议不要将它放在封闭的对象中。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句