登录
首页 >  Golang >  Go问答

如何实现不转义每个操作的模板内嵌模板渲染

来源:stackoverflow

时间:2024-02-09 08:00:24 312浏览 收藏

大家好,我们又见面了啊~本文《如何实现不转义每个操作的模板内嵌模板渲染》的内容中将会涉及到等等。如果你正在学习Golang相关知识,欢迎关注我,以后会给大家带来更多Golang相关文章,希望我们能一起进步!下面就开始本文的正式内容~

问题内容

有谁知道如何使用 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.

虽然我可以使用 {{ "{{" }} 转义所需文字的每个部分,但感觉有点乏味。

我想我应该能够做类似 的事情我想渲染 {{template "outer" .foo}}. 并调用 tmpl.executetemplate(&buff, "outer", data) 之类的东西来仅渲染我指定的“外部”操作。

我还想知道渲染“模板的模板”是否是一种代码味道,如果可能的话,我应该用字符串/替换来替换我的“外部”模板,例如 我想渲染 <<.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}}...

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《如何实现不转义每个操作的模板内嵌模板渲染》文章吧,也可关注golang学习网公众号了解相关技术文章。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>