在yaml中使用占位符
有没有一种方法可以像这样在yaml中使用占位符:在yaml中使用占位符,yaml,computed-properties,indirection,template-variables,Yaml,Computed Properties,Indirection,Template Variables,有没有一种方法可以像这样在yaml中使用占位符: foo: &FOO <<propname>>: type: number default: <<default>> bar: - *FOO propname: "some_prop" default: "some default" foo:&foo : 类型:编号 违约: 酒吧: -*富 道具名称:“一
foo: &FOO
<<propname>>:
type: number
default: <<default>>
bar:
- *FOO
propname: "some_prop"
default: "some default"
foo:&foo
:
类型:编号
违约:
酒吧:
-*富
道具名称:“一些道具”
默认值:“一些默认值”
Context
- YAML版本1.2
- 用户希望
- 在YAML中包含变量占位符
- 在
yaml.load
- 能够为YAML映射键和值使用占位符
- YAML本机不支持变量占位符
- 锚定和别名几乎提供了所需的功能,但它们不能作为变量占位符,而变量占位符可以插入整个YAML文本的任意区域。它们必须作为单独的YAML节点放置
- 有些附加库支持任意变量占位符,但它们不是本机YAML规范的一部分
part01\u客户信息:
客户名称:“荷马”
客户名称:“辛普森”
顾客座右铭:“我喜欢甜甜圈!”
客户电邮:homer@himpson.org
第01部分政府信息:
政府销售税税率:1.15
第01部分采购信息:
prch_单位标签:“培根包的花式釉面甜甜圈”
价格单位:3.00
采购单位数量:7
产品成本:{{PRCHU单价*PRCHU单价}”
总成本:{{PRCHU产品成本*政府销售税}”
第02部分装运信息:
客户名称:{{cust\u fname}”
客户名称:“{{cust\u lname}”
城市:休斯顿
船舶状态:Hexas
第03部分\u电子邮件\u信息:
客户电子邮件:“{{cust_email}”
邮件主题:谢谢你点的甜甜圈!
邮购须知:|
我们希望mail_问候语具有所有预期值
使用填充的占位符(而不是大括号)。
邮寄问候语:|
你好{{cust_fname}{{cust_lname}}!
我们喜欢你的座右铭“{{cust_座右铭}}”,我们同意你的观点!
您的总购买价格为{prch_total_cost}
解释
- 下面是一个内联图像,用绿色、黄色和红色的彩色区域演示了该示例
- 绿色标记的替换在标准YAML中很容易获得,使用锚、别名和
- 黄色标记的替代物在技术上可在标准YAML中获得,但不能没有a或其他某种结合机制
- 标为红色的替代品在标准YAML中不可用。但也有变通办法和替代方案;例如通过或字符串模板引擎(例如python的
)str.format
- 安西布尔
- (支持对YAML的许多扩展,但它是一个编排工具,如果您只想使用YAML,那就太过分了)
- 将YAML与模板系统(如Jinja2或Twig)结合使用
- 使用YAML扩展库
- 使用托管语言中的
或sprintf
样式功能str.format
- 本质上是YAML的一个分支,具有可能更接近OP中指定目标的附加特性
- 与YAML有一些相似之处,但有更多的特性,可能更接近OP中指定的目标
foo: !()
!? $.propname:
type: number
default: !? $.default
bar:
!apply .foo:
propname: "some_prop"
default: "some default"
免责声明:我是作者或Yglu。另请参阅:可能重复的伟大答案,非常详细和解释,谢谢!不幸的是,用绿色标记的不适用于Jekyll用户,至少在JekyllV3.8.5上不适用。我对自己进行了测试。对Jekyll有效的是
&hello
(别名)和*hello
(锚定),如下所述: