with

假值包括 false0、任何 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 文件以獲得更多資訊。