我正在使用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访问特定行?
答案 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中打印出他们的名字。