作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个 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)
运行它:
$ ./test.py
var1: val1
var2: val2
var3: val1-val2.txt
关于python - 在 Python 中加载与 Jinja2 嵌套的 YAML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31967064/
我正在开发一个需要能够平均三个数字的 Facebook 应用程序。但是,它总是返回 0 作为答案。这是我的代码: $y = 100; $n = 250; $m = 300; $number = ($y
我只是无法弄清楚这一点,也找不到任何对我来说有意义的类似问题。我的问题:我从数据库中提取记录,并在我的网页上以每个面板 12 条的倍数显示它们。因此,我需要知道有多少个面板可以使用 JavaScrip
我是一名优秀的程序员,十分优秀!