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

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

WBOY
WBOY轉載
2024-02-10 17:18:171002瀏覽

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

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刪除