如何循环浏览Jekyll的_data文件夹中的所有文件?

时间:2016-09-19 18:16:01

标签: jekyll liquid

如何循环浏览Jekyll中_data文件夹中的每个文件?

目前我在一个名为sidebarlist.yml的文件中有一个文件列表,如下所示:

- file1
- file2
- file3

为了遍历所有这些文件,我使用以下代码:

{% for sidebar in site.data.sidebarlist %}
{% for entry in site.data.sidebars[sidebar].entries %}
...
{% endfor %}
{% endfor %}

我想避免使用sidebarlist.yml并自动遍历_data中的所有文件。我可以这样做吗?

4 个答案:

答案 0 :(得分:1)

根据documentation,jekyll会将YAML资源(.yml,.yaml,.json和.csv文件)直接加载到site.data。如果您的文件使用以下格式之一,则可以执行以下操作:

{% for data in site.data %}
    ...
{% endfor %}

答案 1 :(得分:0)

阅读你的问题标题和我将回答的最后一个问题:

您无法循环显示保存在_data文件夹中的文件。根据{{​​3}}和Jekyll目录结构,默认情况下_data中支持的扩展名.yml .yaml .csv .json的所有文件都将加载到site.data中,就像@ wasthishelpfull的回答一样,您可以通过{{site.data.*filename.data*}}并像Jekyll Variable doc

一样循环播放

如果您想循环浏览文件,请创建一个文件夹(no underscore)将其作为静态文件提供,并使用jquery.get()作为文件中的数据。

或者通过添加_datadata更改为_config.yml,并在网址data_source: data this answer访问

答案 2 :(得分:0)

嵌套循环使您可以循环浏览_data文件的内容。

这样做时,我使用了subdirectory,因为我不想遍历每个数据文件,并且我认为这适用于许多用例。它还使我的_data目录保持整洁。

我的_data目录如下:

_data/
  navigation.yml
  news.yml
  people/
    advisors.yml
    board.yml
    staff.yml

people /中的每个文件都使用如下结构:

- name: Anne Smith
  role: Role A
  url: mysite.com
- name: Joe Shmoe
  role: Role B
  url: mysite.org

在我遍历每个数据文件的页面上:

{% for people_hash in site.data.people %}
{% assign people = people_hash[1] %}

  {% for person in people %}

    <li>{{ person.name }}, {{ person.role }}</li>

  {% endfor %}

{% endfor %}

结果是:

<li>Anne Smith, Role A</li>
<li>Joe Shmoe, Role B</li>

它与您已经完成的操作非常相似,但是不需要额外的Yaml文件。


请注意people_hash[1]的使用-这就是针对数组中适当值的目标。

如果相反,您这样做:

{% for people_hash in site.data.people %}
{% assign people = people_hash[1] %}

    <pre>{{ people }}</pre>

{% endfor %}

您将获得返回的值数组,这将有助于您调试模板。

答案 3 :(得分:0)

我假设您需要以access的方式looping multi levels object杰基尔site.data

{% assign my_data = site.data %}
{% assign my_level = "sidebarlist.sidebars.sidebar" | split: "." %}

{% for level in my_level %}
    {% assign my_data = my_data[level[i]] %}
    {% for data in my_data %}
        {{ data }} : {{ my_data[data] }}
    {% endfor %}
{% endfor %}