如何在Jekyll包含中使用变量作为数组索引

时间:2017-05-30 10:30:36

标签: jekyll liquid

我有一个包含对象的数据文件,我想在Jekyll中使用指定的索引。

我的页面正在调用include这样:

{% include components/header-filter.html items="0" %}

0是我想在这种情况下使用的索引。

我的包括:

{% assign filterID = include.items %}
{% capture id %}{{ filterID }}{% endcapture %}
{% assign filter = site.data.filters[id] %}

这一直有效,直到它到达第3行,此时它不输出任何内容。

我做错了什么?

干杯!

3 个答案:

答案 0 :(得分:1)

我能够通过以下更改来实现此目的:

  1. 使用items作为整数而不是字符串调用include:

    {% include components/header-filter.html items=0 %}
    

    (请注意,这假设您对包含位置没有路径问题。在本地运行jekyll,我坚持将其放在/_inlcudes

  2. 删除capture行,然后将filterID传递到下一行 - 不需要它,可能会导致问题:

    {% assign filterID = include.items %}
    {% assign filter = site.data.filters[filterID] %}
    
  3. 然后你的评论“它什么也没输出”,你需要输出一些东西(可能刚刚从你的例子中省略了,但为了完整性,让我们假设filters有一个名为{{ {1}}):

    name

答案 1 :(得分:1)

你可以通过'切掉中间人'来做到这一点     {%include components / header-filter.html items = 0%}

{% assign filter = site.data.filters[include.items] %}

您的工作原因不是因为捕获将其转换为字符串。您可以使用数学过滤器将字符串转换为整数。例如: {% assign id = id | plus: 0 %}它的值不会改变,但液体现在将它视为整数。

或者,您可以通过省略引号来将其称为整数。 {% include components/header-filter.html items=0 %}

答案 2 :(得分:0)

使用forloop助手

  • forloop.length-整个for循环的长度
  • forloop.index-当前迭代的索引
  • forloop.index0-当前迭代的索引(从零开始)
  • forloop.rindex-还剩下多少项目?
  • forloop.rindex0-剩余多少个项目? (从零开始)
  • forloop.first-这是第一次迭代吗?
  • forloop.last-这是最后一次迭代吗?
{% for offer in site.data.companies %}
  <li data-target="#carouselExampleCaptions" data-slide-to="{{forloop.index0}}"></li>
{% endfor %}

这将给出

<li data-target="#carouselExampleCaptions" data-slide-to="0"></li>

<li data-target="#carouselExampleCaptions" data-slide-to="1"></li>

<li data-target="#carouselExampleCaptions" data-slide-to="2"></li>

...