hugo/docs/content/en/methods/site/Data.md
Bjørn Erik Pedersen 5fd1e74903
Merge commit '9b0050e9aabe4be65c78ccf292a348f309d50ccd' as 'docs'
```
git subtree add --prefix=docs/ https://github.com/gohugoio/hugoDocs.git master --squash
```

Closes #11925
2024-01-27 10:48:57 +01:00

2.8 KiB

title description categories keywords action
Data Returns a data structure composed from the files in the data directory.
related returnType signatures
functions/collections/IndexFunction
functions/transform/Unmarshal
functions/collections/Where
functions/collections/Sort
map
SITE.Data

Use the Data method on a Site object to access data within the data directory, or within any directory mounted to the data directory. Supported data formats include JSON, TOML, YAML, and XML.

{{% note %}} Although Hugo can unmarshal CSV files with the transform.Unmarshal function, do not place CSV files in the data directory. You cannot access data within CSV files using this method.

{{% /note %}}

Consider this data directory:

data/
├── books/
│   ├── fiction.yaml
│   └── nonfiction.yaml
├── films.json
├── paintings.xml
└── sculptures.toml

And these data files:

{{< code file=data/books/fiction.yaml lang=yaml >}}

  • title: The Hunchback of Notre Dame author: Victor Hugo isbn: 978-0140443530
  • title: Les Misérables author: Victor Hugo isbn: 978-0451419439 {{< /code >}}

{{< code file=data/books/nonfiction.yaml lang=yaml >}}

  • title: The Ancien Régime and the Revolution author: Alexis de Tocqueville isbn: 978-0141441641
  • title: Interpreting the French Revolution author: François Furet isbn: 978-0521280495 {{< /code >}}

Access the data by chaining the identifiers:

{{ range $category, $books := .Site.Data.books }}
  <p>{{ $category | title }}</p>
  <ul>
    {{ range $books }}
      <li>{{ .title }} ({{ .isbn }})</li>
    {{ end }}
  </ul>
{{ end }}

Hugo renders this to:

<p>Fiction</p>
<ul>
  <li>The Hunchback of Notre Dame (978-0140443530)</li>
  <li>Les Misérables (978-0451419439)</li>
</ul>
<p>Nonfiction</p>
<ul>
  <li>The Ancien Régime and the Revolution (978-0141441641)</li>
  <li>Interpreting the French Revolution (978-0521280495)</li>
</ul>

To limit the listing to fiction, and sort by title:

<ul>
  {{ range sort .Site.Data.books.fiction "title" }}
    <li>{{ .title }} ({{ .author }})</li>
  {{ end }}
</ul>

To find a fiction book by ISBN:

{{ range where .Site.Data.books.fiction "isbn" "978-0140443530" }}
  <li>{{ .title }} ({{ .author }})</li>
{{ end }}

In the template examples above, each of the keys is a valid identifier. For example, none of the keys contains a hyphen. To access a key that is not a valid identifier, use the index function: