collections.Index
Syntax
collections.Index 集合 索引
collections.Index 集合 键
Returns
any
Alias
index
index
函数返回将第一个参数索引为后续参数的结果。每个被索引的项必须是一个map或slice,例如:
{{ $slice := slice "a" "b" "c" }}
{{ index $slice 0 }} → a
{{ index $slice 1 }} → b
{{ $map := dict "a" 100 "b" 200 }}
{{ index $map "b" }} → 200
该函数接受多个索引作为参数,可以用于获取嵌套值,例如:
{{ $map := dict "a" 100 "b" 200 "c" (slice 10 20 30) }}
{{ index $map "c" 1 }} → 20
{{ $map := dict "a" 100 "b" 200 "c" (dict "d" 10 "e" 20) }}
{{ index $map "c" "e" }} → 20
可以将多个索引写成一个slice:
{{ $map := dict "a" 100 "b" 200 "c" (dict "d" 10 "e" 20) }}
{{ $slice := slice "c" "e" }}
{{ index $map $slice }} → 20
示例:根据 front matter 参数从路径加载数据
假设您想为所有位于 content/vacations/
目录下的文章添加一个 location = ""
字段。您希望在 single.html
模板底部使用此字段填充有关位置的信息。您还有一个位于 data/locations/
目录下的目录,其结构如下:
data/
└── locations/
├── abilene.toml
├── chicago.toml
├── oslo.toml
└── provo.toml
以下是一个示例:
data/locations/oslo.
pop_city: 658390
pop_metro: 1717900
website: https://www.oslo.kommune.no
pop_city = 658390
pop_metro = 1717900
website = 'https://www.oslo.kommune.no'
{
"pop_city": 658390,
"pop_metro": 1717900,
"website": "https://www.oslo.kommune.no"
}
我们使用一个关于 Oslo 的文章作为示例,其 front matter 应与 data/locations/
目录中对应文件的名称完全相同:
content/articles/oslo.md
---
location: oslo
title: 我在挪威的假期
---
+++
location = 'oslo'
title = '我在挪威的假期'
+++
{
"location": "oslo",
"title": "我在挪威的假期"
}
可以使用以下节点路径从模板访问 oslo.toml
的内容:.Site.Data.locations.oslo
。不过,根据 front matter,需要的具体文件会发生变化。
这就是需要 index
函数的地方。在此使用情况下,index
函数需要两个参数:
- 节点路径
- 与所需数据对应的字符串;例如:
{{ index .Site.Data.locations "oslo" }}
.Params.location
的变量是一个字符串,因此可以在上面的示例中替换 oslo
:
{{ index .Site.Data.locations .Params.location }}
=> map[website:https://www.oslo.kommune.no pop_city:658390 pop_metro:1717900]
现在,该调用将根据内容的 front matter 中指定的地点返回特定的文件,但您可能希望将特定属性写入模板。可以通过继续在节点路径中使用点符号(.
)来实现:
{{ (index .Site.Data.locations .Params.location).pop_city }}
=> 658390