Hugo - 使用具有复杂键的索引来获取数据
Hugo - using index with complex key to get data
假设数据文件夹中有以下 urls.toml 文件:
[Group]
link = "http://example.com"
[Group.A]
link = "http://example.com"
我知道我可以像这样在我的短代码中访问 Group.A 中的 link 值:
{{ index .Site.Data.urls.Group.A "link" }}
但是,我想以类似于以下的方式访问 link:
{{ index .Site.Data.urls "Group.A.link" }}
这样做的原因是让我能够将“Group.A.link”作为参数传递给我的内容降价中的“url”简码,如下所示:
{{< url "Group.A.link" >}}
否则,我将无法在urls.toml数据文件中使用嵌套进行逻辑组织。
提前致谢。
您可以使用 index COLLECTION "key"
的嵌套调用来缩小范围。
意思是,
(index (index (index .Site.Data.urls "Group") "A") "link")
根据您的 urls.toml
结构会起作用。
诀窍是让它有点动态,所以你不必太担心深度。
下面的代码片段可以作为短代码的潜在起点。但是,它没有任何安全防护措施。如果出现问题,我建议添加一些检查以获得有意义的 errors/warnings。
{{ $path := .Get 0 }}
{{/* split the string to have indices to follow the path */}}
{{/* if $path is "A.B.C", $pathSlice wil be ["A" "B" "C"] */}}
{{ $pathSlice := split $path "." }}
{{ $currentValue := .Site.Data.urls }}
{{ range $pathSlice }}
{{/* recommended homework: check that $currentValue is a dict otherwise handle with defaults and/or warnings */}}
{{ $currentValue = index $currentValue . }}
{{ end }}
<p>et voila: {{ $currentValue }}</p>
在查看了 Hugo 的代码 (Index function) 之后,我找到了一个非常简单的解决方案。
如果我们想传递一个复杂的逗号分隔键,我们需要做的就是在调用 index 时将其拆分。示例:
在 markdown 中使用 url 简码:
{{< url "Group.A.link" >}}
url 短代码的代码:
{{ index .Site.Data.urls (split (.Get 0) ".")}}
假设数据文件夹中有以下 urls.toml 文件:
[Group]
link = "http://example.com"
[Group.A]
link = "http://example.com"
我知道我可以像这样在我的短代码中访问 Group.A 中的 link 值:
{{ index .Site.Data.urls.Group.A "link" }}
但是,我想以类似于以下的方式访问 link:
{{ index .Site.Data.urls "Group.A.link" }}
这样做的原因是让我能够将“Group.A.link”作为参数传递给我的内容降价中的“url”简码,如下所示:
{{< url "Group.A.link" >}}
否则,我将无法在urls.toml数据文件中使用嵌套进行逻辑组织。
提前致谢。
您可以使用 index COLLECTION "key"
的嵌套调用来缩小范围。
意思是,
(index (index (index .Site.Data.urls "Group") "A") "link")
根据您的 urls.toml
结构会起作用。
诀窍是让它有点动态,所以你不必太担心深度。
下面的代码片段可以作为短代码的潜在起点。但是,它没有任何安全防护措施。如果出现问题,我建议添加一些检查以获得有意义的 errors/warnings。
{{ $path := .Get 0 }}
{{/* split the string to have indices to follow the path */}}
{{/* if $path is "A.B.C", $pathSlice wil be ["A" "B" "C"] */}}
{{ $pathSlice := split $path "." }}
{{ $currentValue := .Site.Data.urls }}
{{ range $pathSlice }}
{{/* recommended homework: check that $currentValue is a dict otherwise handle with defaults and/or warnings */}}
{{ $currentValue = index $currentValue . }}
{{ end }}
<p>et voila: {{ $currentValue }}</p>
在查看了 Hugo 的代码 (Index function) 之后,我找到了一个非常简单的解决方案。 如果我们想传递一个复杂的逗号分隔键,我们需要做的就是在调用 index 时将其拆分。示例:
在 markdown 中使用 url 简码:
{{< url "Group.A.link" >}}
url 短代码的代码:
{{ index .Site.Data.urls (split (.Get 0) ".")}}