如果`foo.bar.baz`是FrontMatter变量,如何访问`site.data.header [“ foo.bar.baz”]`

时间:2019-10-17 15:04:18

标签: jekyll liquid

我想要类似的东西

---
my_var: "foo.bar.baz"
---

{{- site.data.header[page.my_var] -}}

不幸的是,它不起作用...

我知道我可以使用site.data.header.foo.bar.bazsite.data.header["foo"]["bar"]["baz"],但事实并非如此。

我还知道我可以将page.my_var拆分为子字符串,然后将其用作site.data.header["foo"]["bar"]["baz"]。但这会增加Jekyll的构建时间。

我想我需要一些Ruby插件,但是我不认识,也不知道Ruby会写一个。

如果您知道这样的插件,或者可以帮助我写一个插件或知道一些本地的解决方法,那么太好了!

帮助:)

2 个答案:

答案 0 :(得分:0)

  

我还知道我可以将page.my_var拆分为子字符串,然后将它们用作site.data [“ foo”] [“ bar”] [“ baz”]。但这会增加Jekyll的构建时间。

我不确定您可以这样做。即使可以,我也不确定会对性能产生真正的影响。

但是您可以这样做:

_data / foo.yml

bar:
  baz: 1
  biz: 2
  buz: 3
beer:
  baz: 1
  biz: 2
  buz: 3

然后:

---
my_var: "foo.bar.baz"
---
{% assign keys = page.my_var | split: "." %}
{% assign object = site.data %}
{% for key in keys %}
  {% assign object = object[key] %}
{% endfor %}
{{ object }}

答案 1 :(得分:0)

希望做的事已被设计阻止。

site.data["foo.bar.baz"]意味着您需要有一个名为foo.bar.baz.ymlfoo.bar.baz.json等的数据文件,等等。

但是Jekyll 消毒了数据文件的名称,因此生成的对象将只有一个名为"foobarbaz"的键

可以删除故意删除此清理问题的插件,但对于最终用户而言似乎不是良性或安全的。因此,在野生的中找到这样的插件的机会很小。