php小编子墨在这里为大家介绍一种新的技术,即如何渲染“模板的模板”,而不需要转义每个操作。在开发过程中,我们经常会使用模板引擎来渲染动态内容,但是当我们需要在模板中使用模板语法时,往往会遇到转义的问题。本文将为大家详细解答如何解决这个问题,以便更好地应用于项目开发中。
有谁知道如何使用 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)
之类的东西来仅渲染我指定的“外部”操作。
我还想知道渲染“模板的模板”是否是一种代码味道,如果可能的话,我应该用字符串/替换来替换我的“外部”模板,例如 我想渲染 >
。
您可以更改第一级模板的分隔符:
tmpl := template.new("name").delims("<<",">>").parse(...)
然后,将模板编写为:
I want to render <<.Foo>>. but I don't want to render anything on this line, like {{.Bar}}...
以上是如何渲染'模板的模板”,而不转义每个操作的详细内容。更多信息请关注PHP中文网其他相关文章!