以液体显示数据

时间:2016-08-25 16:52:56

标签: jekyll liquid

我希望在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 %}

我还尝试了unlesstablerow,但两者都没有效果。我至少走在正确的轨道上吗?如何限制此forloop停止四项?

谢谢!

2 个答案:

答案 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'" %}