我有一个 YAML 文件(all.yaml
)看起来像:
...
var1: val1
var2: val2
var3: {{var1}}-{{var2}}.txt
...
如果我像这样在 Python 中加载它:
import yaml
f = open('all.yaml')
dataMap = yaml.safe_load(f)
f.close()
print(dataMap["var3"])
输出是{{var1}}-{{var2}}.txt
并不是val1-val2.txt
.
是否可以用值替换嵌套变量?
我尝试加载它:
import jinja2
templateLoader = jinja2.FileSystemLoader( searchpath="/path/to/dir" )
templateEnv = jinja2.Environment( loader=templateLoader )
TEMPLATE_FILE = "all.yaml"
template = templateEnv.get_template( TEMPLATE_FILE )
不再抛出异常,现在我陷入困境,必须研究如何继续。
首先定义一个Undefined
类并加载 yaml 以获取已知值。然后再次加载并使用已知值进行渲染。
#!/usr/bin/env python
import yaml
from jinja2 import Template, Undefined
str1 = '''var1: val1
var2: val2
var3: {{var1}}-{{var2}}.txt
'''
class NullUndefined(Undefined):
def __getattr__(self, key):
return ''
t = Template(str1, undefined=NullUndefined)
c = yaml.safe_load(t.render())
print t.render(c)
Run it:
$ ./test.py
var1: val1
var2: val2
var3: val1-val2.txt
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)