TEMPLATES FUNDAMENTALS

Base templates

block 關鍵字允許您定義頁面的一個或多個主範本的外部框架,並根據需要填充或覆寫部分內容。

基本範本查找順序

基本範本的查找順序與其所應用的範本非常相似(例如,_default/list.html)。

詳細資訊和範例請參見 範本查找順序

定義基本範本

以下範例定義了一個簡單的基本範本,位於 _default/baseof.html。作為預設範本,它是所有頁面渲染的外框,除非您指定一個更接近查找順序起點的 *baseof.html

layouts/_default/baseof.html
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>{{ block "title" . }}
      <!-- 區塊可以包含預設內容 -->
      {{ .Site.Title }}
    {{ end }}</title>
  </head>
  <body>
    <!-- 所有範本共用的程式碼,例如標頭 -->
    {{ block "main" . }}
      <!-- 頁面開始與範本之間有差異的部分 -->
    {{ end }}
    {{ block "footer" . }}
    <!-- 更多共用程式碼,可能是頁尾,但也可以根據需要覆寫 -->
    {{ end }}
  </body>
</html>

覆寫基本範本

預設的列表範本會繼承上述所有程式碼,然後實現自己的 "main" 區塊,如下所示:

layouts/_default/list.html
{{ define "main" }}
  <h1>文章</h1>
  {{ range .Pages }}
    <article>
      <h2>{{ .Title }}</h2>
      {{ .Content }}
    </article>
  {{ end }}
{{ end }}

這會將我們(基本上是空的)“main” 區塊的內容替換為對列表範本有用的內容。在這個範例中,我們沒有定義 "title" 區塊,因此來自基本範本的內容在列表中保持不變。

以下範例顯示了如何使用特定於您的預設 單一範本 的程式碼來覆寫基本範本的 "main""title" 區塊區域:

layouts/_default/single.html
{{ define "title" }}
  <!-- 這會覆寫 baseof.html 中設定的預設值;即原始範例中的 "{{ .Site.Title }}" -->
  {{ .Title }} &ndash; {{ .Site.Title }}
{{ end }}
{{ define "main" }}
  <h1>{{ .Title }}</h1>
  {{ .Content }}
{{ end }}