ytt模板:如何在文本模板字符串中实现可选字段默认值设置
ytt模板结合可选字段判断与默认值的实现方法
第一种写法:直接在文本插值中嵌入判断逻辑
你可以直接在(@= ... @)插值块内使用getattr函数替代hasattr+if-else的组合,语法更简洁且功能一致:
keystring: 'initialString: (@= str(getattr(data.values.rootelem, "childelem", "default")) @)'
getattr(obj, attr, default)的作用是:如果对象obj存在attr属性,返回其值;否则返回default,完全满足你对可选字段设置默认值的需求。
第二种写法:先定义变量再引用
如果希望把逻辑抽离到变量中,再在文本模板里引用,可以用ytt的注释式代码块先定义key变量:
#@ key = getattr(data.values.rootelem, "childelem", "default") keystring: 'initialString: (@= str(key) @)'
ytt会优先执行#@开头的代码逻辑,将处理后的结果赋值给key,之后再解析文本中的(@= str(key) @)插值,最终生成正确的字符串。
补充说明
- 两种写法都完全符合ytt的语法规范,可根据场景选择:逻辑简单用第一种,需要复用变量或逻辑复杂用第二种。
- 如果你坚持使用
hasattr+if-else的写法,第一种写法的原始代码也是有效的,只需确保语法没有拼写错误:keystring: 'initialString: (@= str(data.values.rootelem.childelem if hasattr(data.values.rootelem, "childelem") else "default") @)'
内容的提问来源于stack exchange,提问作者CuriousK
相关产品推荐
相关产品推荐

