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

时间:2015-10-27 14:42:44

标签: csv 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我试图通过将值传递给Zoning,从badges.csv访问site.data行:

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

最终,我会将["Zoning"]设为页面变量,以根据页面加载特定徽章。

我已尝试[Zoning]['Zoning']["Zoning"]。这些都不会输出任何数据,也不会在jekyll build期间抛出错误。

如何从CSV访问特定行?

2 个答案:

答案 0 :(得分:4)

我认为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" %}

答案 1 :(得分:0)

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中打印出他们的名字。