CONTENT MANAGEMENT

Data sources

Hugo 可以訪問並 unmarshal 本地和遠端數據來源,包括 CSV、JSON、TOML、YAML 和 XML。使用這些數據來增強現有內容或創建新內容。

數據來源可以是數據目錄中的文件、[全局資源]、[頁面資源] 或 [遠程資源]。

數據目錄

您項目根目錄中的數據目錄可以包含一個或多個數據文件,這些文件可以是扁平的或是嵌套的樹狀結構。Hugo 合併這些數據文件以創建一個單一的數據結構,並可以通過 Site 物件上的 Data 方法訪問。

Hugo 還會將主題和模組中的數據目錄合併到這個單一的數據結構中,其中項目根目錄中的數據目錄會優先。

主題和模組作者可能希望將他們的數據文件命名空間化,以防止衝突。例如:

project/
└── data/
    └── mytheme/
        └── foo.json

請參閱 Data 方法的文檔,了解詳細信息和示例。

全局資源

使用 resources.Gettransform.Unmarshal 函數來訪問作為全局資源存在的數據文件。

請參閱 transform.Unmarshal 文檔,了解詳細信息和示例。

頁面資源

使用 Page 物件上的 Resources.Get 方法,並結合 transform.Unmarshal 函數來訪問作為頁面資源存在的數據文件。

請參閱 transform.Unmarshal 文檔,了解詳細信息和示例。

遠程資源

使用 resources.GetRemotetransform.Unmarshal 函數來訪問遠程數據。

請參閱 transform.Unmarshal 文檔,了解詳細信息和示例。

增強現有內容

使用數據來源來增強現有內容。例如,創建一個短代碼來從全局 CSV 資源渲染 HTML 表格。

assets/pets.csv
"name","type","breed","age"
"Spot","dog","Collie","3"
"Felix","cat","Malicious","7"
content/example.md
{{< csv-to-table "pets.csv" >}}
layouts/shortcodes/csv-to-table.html
{{ with $file := .Get 0 }}
  {{ with resources.Get $file }}
    {{ with . | transform.Unmarshal }}
      <table>
        <thead>
          <tr>
            {{ range index . 0 }}
              <th>{{ . }}</th>
            {{ end }}
          </tr>
        </thead>
        <tbody>
          {{ range after 1 . }}
            <tr>
              {{ range . }}
                <td>{{ . }}</td>
              {{ end }}
            </tr>
          {{ end }}
        </tbody>
      </table>
    {{ end }}
  {{ else }}
    {{ errorf "The %q shortcode was unable to find %s. See %s" $.Name $file $.Position }}
  {{ end }}
{{ else }}
  {{ errorf "The %q shortcode requires one positional argument, the path to the CSV file relative to the assets directory. See %s" .Name .Position }}
{{ end }}

Hugo 會渲染如下內容:

name type breed age
Spot dog Collie 3
Felix cat Malicious 7

創建新內容

使用 [內容適配器] 來創建新內容。