有人知道如何使用text/template来呈现"模板模板"吗?在这种情况下,只会呈现特定的操作(即,包装在{{...}}中的内容),其余的将被视为文字.

例如,给定以下模板:

I want to render {{.Foo}}.

but I don't want to render anything on this line, like {{.Bar}} or this template: [{{ .Status | toUpper }}{{ if eq .Status "firing" }}:{{ .Alerts.Firing | len }}{{ end }}] {{ .CommonLabels.alertname }} for {{ .CommonLabels.job }}

Render {{.Foo}} again.

我希望呈现以下输出:

I want to render foo.

but I don't want to render anything on this line, like {{.Bar}} or this template: [{{ .Status | toUpper }}{{ if eq .Status "firing" }}:{{ .Alerts.Firing | len }}{{ end }}] {{ .CommonLabels.alertname }} for {{ .CommonLabels.job }}

Render foo again.

虽然我可以用{{ "{{" }}来避开我想要的文字的每一部分,但感觉有点单调乏味.

我设想我应该能够执行类似I want to render {{template "outer" .Foo}}.的操作,并调用类似tmpl.ExecuteTemplate(&buff, "outer", data)的操作,以仅呈现我指定的"外部"操作.

我还想知道呈现"模板的模板"是否是一种代码气味,如果可能的话,我应该用一个字符串/替换来替换我的"外层"模板,比如I want to render <<.Foo>>.

推荐答案

您可以更改第一级模板的分隔符:

tmpl := template.New("name").Delims("<<",">>").Parse(...)

然后,将模板编写为:

I want to render <<.Foo>>.

but I don't want to render anything on this line, like {{.Bar}}...

Go相关问答推荐

为什么没有正确生成这些元组?

关于如何使用 Service Weaver 设置多个不同侦听器的问题

Golang校验器包:重命名字段错误处理

这是泛型的有效用例吗?

如何将 DirName 和 serial 添加到 X509v3 Authority Key Identifier

io.Reader 无限循环与 fmt.Fscan

Go 中的 Azure JWT 验证不起作用

如何使用 go-git 将特定分支推送到远程

Golang代码判断第一个词是否可以从第二个词形成

致命错误 - 所有 Goroutines 都睡着了!僵局

为超时的单元测试创​​建 deadlineExceededError:true

如何使用 Go 获取 X11 中的窗口列表

如何使用特定的 Go 版本运行 govulncheck?

try 运行 docker-compose up -d 时出现错误

Go 中 SDL Surface 的 OpenGL 纹理

无限期运行 Go routine (完成后重新启动)

显示作为服务帐户身份验证的谷歌日历事件 - Golang App

(如何)我可以基于接口抽象地实现Stringer吗?

Golang 泛型同时具有接口和实现

try 创建新的 etcdv3 客户端时出现pc error: code = Unavailable desc = error reading from server: EOF