如何过滤Dynaconf内部设置,仅获取自定义配置参数?
问题:如何在Dynaconf中仅获取自定义配置参数?
运行以下代码后,输出结果除了settings.toml里显式定义的自定义配置外,还包含RENAMED_VARS、SETTINGS_MODULE、PROJECT_ROOT、*_FOR_DYNACONF等Dynaconf自动生成的内部设置,想知道有没有办法只提取自定义配置,排除这些内部项:
from .config import settings for k,v in settings.items(): print(k,v)
解决方案
方法1:过滤字典排除内部键
利用Dynaconf的as_dict()方法获取完整配置字典,再通过规则过滤掉内部设置。大部分内部键以_开头,可直接过滤:
from .config import settings # 过滤掉以下划线开头的键 custom_config = {k: v for k, v in settings.as_dict().items() if not k.startswith('_')} for k, v in custom_config.items(): print(k, v)
如果需要更精准的控制,可手动指定要排除的内部键集合:
from .config import settings # 列出需要排除的Dynaconf内部键 EXCLUDED_INTERNAL_KEYS = {'RENAMED_VARS', 'SETTINGS_MODULE', 'PROJECT_ROOT', 'ENVVAR_PREFIX_FOR_DYNACONF'} custom_config = {k: v for k, v in settings.items() if k not in EXCLUDED_INTERNAL_KEYS}
方法2:直接访问自定义配置键
如果清楚自己定义的配置键名,直接通过属性或get()方法访问,完全不会涉及内部设置:
from .config import settings # 直接访问自定义配置 print(settings.MY_CUSTOM_SETTING) # 或者用get方法,支持默认值 print(settings.get('MY_CUSTOM_SETTING', default='default_value'))
方法3:映射到自定义类
定义一个空类,用populate_obj()方法将自定义配置映射到类属性中,内部设置不会被映射:
from .config import settings class MyCustomConfig: pass # 将自定义配置映射到类属性 settings.populate_obj(MyCustomConfig) # 访问自定义配置 print(MyCustomConfig.MY_CUSTOM_SETTING)
内容的提问来源于stack exchange,提问作者RubenLaguna
相关产品推荐
相关产品推荐

