卓越飞翔博客卓越飞翔博客

卓越飞翔 - 您值得收藏的技术分享站
技术文章35250本站已运行394

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

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

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) 之类的东西来仅渲染我指定的“外部”操作。

我还想知道渲染“模板的模板”是否是一种代码味道,如果可能的话,我应该用字符串/替换来替换我的“外部”模板,例如 我想渲染 <<.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}}...
卓越飞翔博客
上一篇: 无法读取“https://github.com”的用户名:Windows 上禁用终端提示
下一篇: 返回列表
留言与评论(共有 0 条评论)
   
验证码:
隐藏边栏