首頁 > 後端開發 > Golang > 如何渲染'模板的模板”,而不轉義每個操作

如何渲染'模板的模板”,而不轉義每個操作

WBOY
發布: 2024-02-10 17:18:17
轉載
1059 人瀏覽過

如何渲染模板的模板”,而不轉義每個操作

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) 之類的東西來僅渲染我指定的「外部」操作。

我還想知道渲染「模板的模板」是否是一種程式碼味道,如果可能的話,我應該用字串/替換來替換我的「外部」模板,例如我想渲染<&lt ;.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}}...
登入後複製

以上是如何渲染'模板的模板”,而不轉義每個操作的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:stackoverflow.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板