如何用django-environ配置嵌套字典类型的环境变量?
解决django-environ读取嵌套字典环境变量的问题
方法1:使用双下划线(__)分隔嵌套键
django-environ支持通过双下划线区分嵌套字典的层级,定义环境变量时按父键__子键=值的格式编写,多组键值对用分号(;)分隔即可。
环境变量配置
DEPARTMENTS_INFORMATION='Pants__name=Pants Department;Pants__email=pants@example.com;Pants__extension=123;Shirts__name=Shirts Department;Shirts__email=shirts@example.com;Shirts__extension=456;Socks__name=Socks Department;Socks__email=socks@example.com;Socks__extension=789'
Django配置文件中读取
在settings.py中调用env.dict()时开启nested=True参数:
import environ env = environ.Env() environ.Env.read_env() DEPARTMENTS_INFORMATION = env.dict('DEPARTMENTS_INFORMATION', nested=True)
方法2:使用JSON格式字符串
直接将嵌套字典序列化为JSON字符串作为环境变量值,读取时启用json=True参数即可解析。
环境变量配置
DEPARTMENTS_INFORMATION='{"Pants": {"name": "Pants Department", "email": "pants@example.com", "extension": "123"}, "Shirts": {"name": "Shirts Department", "email": "shirts@example.com", "extension": "456"}, "Socks": {"name": "Socks Department", "email": "socks@example.com", "extension": "789"}}'
注意:在bash等shell环境中,需用单引号包裹JSON字符串,避免特殊字符被shell解析。
Django配置文件中读取
import environ env = environ.Env() environ.Env.read_env() DEPARTMENTS_INFORMATION = env.dict('DEPARTMENTS_INFORMATION', json=True)
错误原因说明
你遇到的ValueError是因为环境变量格式不符合django-environ解析嵌套字典的要求。默认情况下env.dict()仅支持扁平的key=value;key2=value2格式,若要解析嵌套结构,必须通过上述两种方法之一明确指定解析规则。
内容的提问来源于stack exchange,提问作者UpDawg
相关产品推荐
相关产品推荐

