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