Django使用python-decouple读取SECRET_KEY报InterpolationSyntaxError如何解决
错误原因
你遇到的configparser.InterpolationSyntaxError报错,是因为python-decouple读取.ini配置文件时,底层依赖的configparser模块默认开启了插值功能,会把%作为插值语法的特殊标记处理,而Django自动生成的SECRET_KEY通常包含单独的%字符,不符合插值语法规则就会触发错误。
解决方法
- 方法1:转义.ini文件中的%字符
不需要修改任何代码,只需要把.ini配置文件里SECRET_KEY值中的所有单个%都替换成%%即可,configparser会自动把%%解析为单个%,最终读取到的SECRET_KEY和原始值完全一致。 - 方法2:改用.env格式存储配置
直接替换配置文件格式即可,python-decouple原生支持.env格式,该格式默认不会做插值处理,会直接读取原始字符串:- 在项目根目录新建
.env文件,把原.ini中的所有配置项按KEY=VALUE的格式写入,不需要设置section - 删除原.ini配置文件即可,settings中
config("SECRET_KEY")的代码不需要任何修改
.env文件示例:
SECRET_KEY=%^e=(r2l0*73)4zxv!(!4x(%(_koxr049zlesn3" EMAIL_HOST=smtp.xxx.com EMAIL_HOST_USER=你的邮箱地址 EMAIL_HOST_PASSWORD=你的邮箱密码 - 在项目根目录新建
- 方法3:手动关闭.ini的插值功能(不推荐)
如果你必须保留.ini格式,也可以自定义python-decouple的读取逻辑,使用configparser.RawConfigParser代替默认的解析器,关闭插值功能,但改动成本高于前两种方法。
内容的提问来源于stack exchange,提问作者Hamedio
相关产品推荐
相关产品推荐

