GoFrame 模板引擎-模板標(biāo)簽

2022-04-01 11:30 更新

模板引擎默認(rèn)使用了 ?{{? 和 ?}}? 作為左右閉合標(biāo)簽,開(kāi)發(fā)者可通過(guò)?gview.SetDelimiters?方法設(shè)置自定義的模板閉合標(biāo)簽。

使用 ?.? 來(lái)訪問(wèn)當(dāng)前對(duì)象的值(模板局部變量)。

使用 ?$? 來(lái)引用當(dāng)前模板根級(jí)的上下文(模板全局變量)。

使用 ?$var? 來(lái)訪問(wèn)特定的模板變量。

模板中支持的 go 語(yǔ)言符號(hào)

{{"string"}}     // 一般 string
{{`raw string`}} // 原始 string
{{'c'}}          // byte
{{print nil}}    // nil 也被支持

模板中的 ?pipeline ?

可以是上下文的變量輸出,也可以是函數(shù)通過(guò)管道傳遞的返回值

{{. | FuncA | FuncB | FuncC}}

當(dāng)?pipeline?的值等于:

  • ?false?或?0 ?
  • ?nil?的指針或?interface ?
  • 長(zhǎng)度為?0?的?array?, ?slice?, ?map?, ?string?

那么這個(gè)?pipeline?被認(rèn)為是空。

需要注意:在?gf?模板引擎中,當(dāng)模板中展示的指定變量不存在時(shí),將會(huì)顯示為空(標(biāo)準(zhǔn)庫(kù)模板引擎會(huì)展示?<no value>?)。

if … else … end

{{if pipeline}}...{{end}}

?if?判斷時(shí),?pipeline?為空時(shí),相當(dāng)于判斷為?false?。

支持嵌套的循環(huán)

{{if .condition}}
    ...
{{else}}
	{{if .condition2}}
        ...
    {{end}}
{{end}}

也可以使用?else if?進(jìn)行

{{if .condition}}
    ...
{{else if .condition2}}
    ...
{{else}}
    ...
{{end}}

range … end

{{range pipeline}} {{.}} {{end}}

?pipeline?支持的類型為?slice?, ?map?, ?channel?。

注意:在?range?循環(huán)內(nèi)部,?.? 符號(hào)會(huì)被覆蓋為以上類型的子元素(局部變量)。如果想在循環(huán)中訪問(wèn)外部變量(全局變量),請(qǐng)加上?$?符號(hào),如:?{{$.Session.Name}} ?

此外,對(duì)應(yīng)的值長(zhǎng)度為?0?時(shí),?range?不會(huì)執(zhí)行,?.? 不會(huì)改變。

例如,遍歷?map?:

{{range $key, $value := .MapContent}}
    {{$key}}:{{$value}}
{{end}}

例如,遍歷?slice?:

{{range $index, $elem := .SliceContent}}
    {{range $key, $value := $elem}}
        {{$key}}:{{$value}}
    {{end}}
{{end}}

with … end

{{with pipeline}}...{{end}}

?with?用于重定向?pipeline?

{{with .Field.NestField.SubField}}
	{{.Var}}
{{end}}

define

?define?可以用來(lái)自定義模板內(nèi)容塊(給一段模板內(nèi)容定義一個(gè)模板名稱),可用于模塊定義和模板嵌套(使用在?template?標(biāo)簽中)。

{{define "loop"}}
	<li>{{.Name}}</li>
{{end}}

其中?loop?為該模板內(nèi)容塊的名稱,隨后可使用template標(biāo)簽調(diào)用模板:

<ul>
    {{range .Items}}
	{{template "loop" .}}
    {{end}}
</ul>

?define?標(biāo)簽需要結(jié)合?template?標(biāo)簽一起使用,并且支持跨模板使用(在同一模板目錄/子目錄下有效,原理是使用的?ParseFiles?方法解析模板文件)。

template

{{template "模板名稱" pipeline}}

將對(duì)應(yīng)的上下文?pipeline?傳給模板,才可以在模板中調(diào)用。

注意:?template?標(biāo)簽參數(shù)為模板名稱,而不是模板文件路徑,?template?標(biāo)簽不支持模板文件路徑。

?template?標(biāo)簽需要結(jié)合?define?標(biāo)簽一起使用,并且支持跨模板使用(在同一模板目錄/子目錄下有效,原理是使用的?ParseFiles?方法解析模板文件)。

include

該標(biāo)簽為?gf?框架模板引擎新增標(biāo)簽

{{include "模板文件名(需要帶完整文件名后綴)" pipeline}}

在模板中可以使用?include?標(biāo)簽載入其他模板(任意路徑),模板文件名支持相對(duì)路徑以及文件的系統(tǒng)絕對(duì)路徑。如果想要把當(dāng)前模板的模板變量傳遞給子模板(嵌套模板),可以這樣:

{{include "模板文件名(需要帶完整文件名后綴)" .}}

與?template?標(biāo)簽的區(qū)別是:?include?僅支持文件路徑,不支持模板名稱;而?tempalte?標(biāo)簽僅支持模板名稱,不支持文件路徑。

注釋

允許多行文本注釋,不允許嵌套。

{{/*
comment content
support new line
*/}}


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)