如何循环浏览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中的所有文件。我可以这样做吗?
答案 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()作为文件中的数据。
或者通过添加_data
将data
更改为_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 %}