Helm模板中如何将字典作为参数传递?附可运行示例
Helm 模板传递字典作为参数的实现方案
Helm 原生支持字典类型作为模板参数传递,你原有的实现思路完全可行,代码无法运行是几处语法细节错误导致的。
原有代码问题
- 变量声明语法错误:
func模板中首次定义$D变量时需使用:=,=仅支持对已声明的变量重新赋值,原写法{{- $D = dict 'a' 1 'b' 2 'c' 3} -}}会触发变量未定义的渲染报错。 - 空白裁剪符使用不规范:部分
-的位置容易导致渲染结果出现多余空行、字符串拼接错位问题。
可运行实现示例
_helpers.tpl 定义(接收字典参数的display模板)
{{- define "display" }} {{- $d := .d }} {{- range $key, $value := $d }} key: {{ $key }} Value: {{ $value }} {{- end }} {{- end }}
_test.tpl 定义(构造字典并调用模板的func逻辑)
{{- define "func" }} {{- $D := dict "a" 1 "b" 2 "c" 3 }} {{- include "display" (dict "d" $D) }} {{- end }}
调用效果
在任意模板位置通过{{ include "func" . }}调用,即可得到和Python示例完全一致的输出:
key: a Value: 1 key: b Value: 2 key: c Value: 3
补充说明
- 调用其他模板时,通过
dict构造自定义上下文传参是Helm的标准用法,字典的值支持任意Helm模板支持的类型,包括嵌套字典、列表、数值、字符串等。 - 如果需要在传参时保留原顶层上下文,可以将根对象一并传入参数字典,写法为
(dict "d" $D "root" $),被调用模板中可通过.root访问全局上下文的所有值。
内容的提问来源于stack exchange,提问作者quynhhgoogoo
相关产品推荐
相关产品推荐

