Jekyll根据名称获取特定的_data数据

Chr*_*ard 2 jekyll

我有一个数据文件夹结构:

_data/footer/1.yml _data/footer/2.yml 等等

我想要做的是在模板中,基于前题变量,选择那些文件之一并返回其中包含的数据。

如果执行此操作: site.data.footer.1它以1.yml返回数据。如果我尝试执行site.data.footer.{{page.footer}}此操作,即使前件的页脚变量设置为1,它也不会返回任何内容:

---
footer: 1
---
{% assign foot_id = page.footer %}
{{foot_id}}
{% assign stuff = site.data.footer.{{foot_id}} %}
{{stuff}}
Run Code Online (Sandbox Code Playgroud)

stuff在这种情况下将为空白。这是正确的方法吗?怎么了

Dav*_*uel 6

如果我们查看您的数据:

site.data.footer = {"1"=>{"variable"=>"one"}, "2"=>{"variable"=>"two"}}
Run Code Online (Sandbox Code Playgroud)

我们有一个哈希,键是字符串。

我们可以像这样访问我们的数据:

{{ site.data.footer.1 }} => {"variable"=>"one"}
or
{{ site.data.footer["1"] }} => {"variable"=>"one"}
Run Code Online (Sandbox Code Playgroud)

请注意,括号表示法将字符串作为键。如果尝试使用整数,则不返回任何内容{{ site.data.footer[1] }} => null

如果要使用page变量,则需要将其作为字符串。有可能 :

---
# a string in the front matter
footer: "1"
---

{{ site.data.footer[page.footer] }} => {"variable"=>"one"}
Run Code Online (Sandbox Code Playgroud)

或强制转换为字符串的整数

---
# a string in the front matter
footer: 1 
---

Transform an integer to a string by adding it an empty string
{% assign foot_id = page.footer | append: "" %}

{{ site.data.footer[foot_id] }} => {"variable"=>"one"}
Run Code Online (Sandbox Code Playgroud)

注意:您也可以将字符串转换为整数,如下所示:

{% assign my_integer = "1" | plus: 0 %}
{{ my_integer | inspect }} => 1 but not "1"
Run Code Online (Sandbox Code Playgroud)