我希望在jekyll生成的网站上显示来自csv文件的信息。我需要在csv文件中搜索相应的类别,然后在页面上显示其中的四个。过滤到所选类别没有问题,但我很难将输出限制为四。
有没有办法对if语句应用限制?或者有没有其他方式来写这个?我在Liquid中并不精通,所以我很可能错过了一个明显的解决方案。
使所有适用数据显示在屏幕上的基本代码:
{% for study in site.data.studies %}
{% if study.category contains "foo" %}
<div class="col-sm-3">
<h3>{{ study.title }}</h3>
<div class="list-of-attributes">
<h6>Attributes: </h6>
{{ study.attributes }}
</div>
</div>
{% else %}
{% continue %}
{% endif %}
{% endfor %}
我还尝试了unless
和tablerow
,但两者都没有效果。我至少走在正确的轨道上吗?如何限制此forloop停止四项?
谢谢!
答案 0 :(得分:1)
理想情况下,数据应在渲染前进行过滤,但您也可以创建variable in liquid来保存渲染的内容数
{% assign rendered = 0 %}
{% for study in site.data.studies %}
{% if study.category contains "foo" %}
<div class="col-sm-3">
<h3>{{ study.title }}</h3>
<div class="list-of-attributes">
<h6>attributes: </h6>
{{ study.attributes }}
</div>
</div>
{% assign rendered = rendered | plus: 1 %}
{% if rendered == 4 %}
{% break %}
{% endif %}
{% endif %}
{% endfor %}
我所说的理想解决方案是创建自己的过滤器,完成所有工作(按类别过滤并限制结果数量)
{% assign filtered = site.data.studies | my_custom_filter %}
{% for study in filtered %}
<div class="col-sm-3">
<h3>{{ study.title }}</h3>
<div class="list-of-attributes">
<h6>attributes: </h6>
{{ study.attributes }}
</div>
</div>
{% endfor %}
答案 1 :(得分:0)
假设你的category
是一个字符串,而不是一个数组,你可以这样做:
{% assign selected = site.data.studies | where: 'category','foo' %}
{% for study in selected limit:4 %}
<div class="col-sm-3">
<h3>{{ study.title }}</h3>
<div class="list-of-attributes">
<h6>Attributes: </h6>
{{ study.attributes }}
</div>
</div>
{% endfor %}
如果您的category
是"foo, bar, baz"
字符串或字符串数组,则可以使用jekyll 3.2 where_exp
过滤器:
{% assign selected = site.data.studies | where_exp:"item", "item.category contains 'foo'" %}