with
假值包括 false
、0
、任何 nil
指標或介面值、長度為零的陣列、切片、映射或字串,以及零 time.Time
值。
其他一切皆為真值。
{{ $var := "foo" }}
{{ with $var }}
{{ . }} → foo
{{ end }}
與 else
語句一起使用:
{{ $var := "foo" }}
{{ with $var }}
{{ . }} → foo
{{ else }}
{{ print "var 是假值" }}
{{ end }}
使用 else with
檢查多個條件:
{{ $v1 := 0 }}
{{ $v2 := 42 }}
{{ with $v1 }}
{{ . }}
{{ else with $v2 }}
{{ . }} → 42
{{ else }}
{{ print "v1 和 v2 是假值" }}
{{ end }}
初始化變數,並將其範圍限制於當前區塊:
{{ with $var := 42 }}
{{ . }} → 42
{{ $var }} → 42
{{ end }}
{{ $var }} → 未定義
理解上下文
在頁面模板的最上方,上下文(點)是 Page
物件。在 with
區塊內,上下文會綁定至傳遞給 with
語句的值。
以下這個範例會出錯:
{{ with 42 }}
{{ .Title }}
{{ end }}
Hugo 會顯示錯誤訊息:
無法在 int 類型中評估欄位 Title
錯誤發生是因為我們試圖對整數使用 .Title
方法,而整數並不是 Page
物件。在 with
區塊內,如果我們希望渲染頁面標題,我們需要取得傳遞到模板中的上下文。
這段模板將會正確渲染頁面標題:
{{ with 42 }}
{{ $.Title }}
{{ end }}
查看 Go 的 text/template 文件以獲得更多資訊。