首页 >后端开发 >Golang >如何渲染'模板的模板”,而不转义每个操作

如何渲染'模板的模板”,而不转义每个操作

WBOY
WBOY转载
2024-02-10 17:18:171056浏览

如何渲染模板的模板”,而不转义每个操作

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中文网其他相关文章!

声明:
本文转载于:stackoverflow.com。如有侵权,请联系admin@php.cn删除