如何使用 Jekyll 从 CSV 访问特定行?

How to access specific row from CSV with Jekyll?

我正在使用 Jekyll [2.5.3] 构建原型,需要访问我布局中 _data 中文件的特定行。

在文件 _data/badges.csv 我有:

name, image_url
Heat, http://pathtoimage.com/image-1.png
Water, http://pathtoimage.com/image-2.png
Zoning, http://pathtoimage.com/image-3.png
...

_layout/page.html 中,我试图通过将值传递给 site.data 来访问 badges.csv 中的 Zoning 行,如下所示:

{% assign badge = site.data.badges.name["Zoning"] %}
{{ badge.image_url }}

最终我会["Zoning"]一个页面变量来加载基于页面的特定徽章。

我试过 [Zoning]['Zoning']["Zoning"]。 None 其中输出任何数据并且在 jekyll build 期间不抛出错误。

如何访问 CSV 中的特定行?

我认为 CSV 文件被视为数组而不是地图。如果您想在 CSV 文件中查找特定条目,您可以这样做:

{% for badge in site.data.badges %}
  {% if badge.name == "Zoning" %}
    {{ badge.image_url }}
  {% endif %}
{% endfor %}

然后您可以将其移至 _includes 并传递参数以重用该功能:

_includes/徽章-url.html

{% for badge in site.data.badges %}
  {% if badge.name == include.name %}
    {{ badge.image_url }}
  {% endif %}
{% endfor %}

包括分区

{% include badge-url.html name="Zoning" %}

Jekyll 4.2 引入了 find liquid tag 这对这个很有帮助。

例如,_data/people.csv 处的 CSV 文件格式类似于:

name, slug, title
Jane Doe, jane-doe, VP of Stuff

你可以这样做:

{% assign person = site.data.people | find:"slug","jane-doe" %}
{{ person.name }}

将从 CSV 中打印出他们的名字。