虽然hugo创建的是静态网站, 所以不会连接像mysql这样的数据库来获取数据, 但在有些地方依然需要获取一些预先定义好的数据, hugo提供了一些方法来解决这些问题.
data目录
在data目录下创建json | yaml | toml 格式的文件. 通过 .Site.Data
变量以MPA的方式访问这些数据. 也就是MAP的结构组织目录和文件名的. 具体的可以输出.Site.Data
来查看
例如在data目录中存放了两个用户的信息:
1
2
|
data/users/jim.toml
data/users/tom.toml |
文件的内容为:
1
2
3
4
5
6
|
name = "Jim"
age = 22
address = [
"地址一",
"地址二"
]
|
在模板中使用这些数据:
1
2
3
4
|
{{$users := .Site.Data.users}}
{{$user_jim := .Site.Data.users.jim}}
<div>jim.tom文件中的姓名: {{$user_jim.name}}</div>
<div>输出users目录下所有文件的内容: {{$users}}</div>
|
外源数据
hugo还可以通过getJSON
和getCSV
两个函数加载外部数据, 这两个函数是模板函数. 在外部数据加载完成以前, hugo会暂停渲染模板文件.
语法:
1
2
|
{{ $dataJ := getJSON "url" }}
{{ $dataC := getCSV "separator" "url" }}
|
带可变参数语法:
1
2
|
{{ $dataJ := getJSON "url prefix" "arg1" "arg2" "arg n" }}
{{ $dataC := getCSV "separator" "url prefix" "arg1" "arg2" "arg n" }}
|
getCSV
的第一个参数为分隔符.
示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
<table>
<thead>
<tr>
<th>Name</th>
<th>Position</th>
<th>Salary</th>
</tr>
</thead>
<tbody>
{{ $url := "https://example.com/demo.csv" }}
{{ $sep := "," }}
{{ range $i, $r := getCSV $sep $url }}
<tr>
<td>{{ index $r 0 }}</td>
<td>{{ index $r 1 }}</td>
<td>{{ index $r 2 }}</td>
</tr>
{{ end }}
</tbody>
</table>
|
这些外部的csv或json文件加载到本地后, 会缓存在特定的目录$TMPDIR/hugo_cache/
.
也可通过--cacheDir
参数指定新的缓存目录.或者通过--ignoreCache
来禁止缓存.