过滤Liquid / Jekyll模板中的数组

时间:2014-08-27 08:31:11

标签: jekyll liquid

大部分液体"过滤器"实际上是" map" s在函数式编程意义上:你接受一个数组,你将一个函数应用于每个元素并返回转换后的数组。我想改为"过滤":我想只返回数组中符合特定条件的那些项目。我怎么能这样做?

具体来说,我正在尝试改进此模板:

Authors: 
{% for c in site.data["contributors"] %}
  {% assign contributor = c[1] %}{% if contributor.role contains "author" %}{{contributor.name.given}} {{contributor.name.family}}{% endif %}{% endfor %}
美化,看起来像这样:

Authors: 
{% for c in site.data["contributors"] %}
  {% assign contributor = c[1] %}
  {% if contributor.role contains "author" %}
    {{contributor.name.given}} {{contributor.name.family}}
  {% endif %}
{% endfor %}

其数据如下所示:

ianbarber:
  name:
    given: Ian
    family: Barber
  org:
    name: Google
    unit: Developer Relations
  country: UK
  role:
    - engineer
  homepage: http://riskcompletefailure.com
  google: +ianbarber
  twitter: ianbarber
  email: ianbarber@google.com
  description: "Ian is a DRE"

samdutton:
  name:
    given: Sam
    family: Dutton
  org:
    name: Google
    unit: Developer Relations
  country: UK
  role:
    - author
  google: +SamDutton
  email: dutton@google.com
  description: "Sam is a Developer Advocate"

(取自here)。

这种方法的问题在于,如果当前元素与条件不匹配,则会输出换行符,如https://developers.google.com/web/humans.txt中所示。

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:6)

Jekyll 2.0有一个where过滤器。见docs。示例 - 来自doc:

{{ site.members | where:"graduation_year","2014" }}
{{ site.members | where_exp:"item", "item.graduation_year == 2014" }}

答案 1 :(得分:4)

如果您想要在条件不匹配时删除换行符,请尝试删除iffor子句中不需要的换行符:

{% for c in site.data["contributors"] %}{% assign contributor = c[1] %}{% if contributor.role contains "author" %}
  {{contributor.name.given}} {{contributor.name.family}}{% endif %}{% endfor %}

在源代码中可能看起来不太好,但它可能会摆脱输出中的换行符。

注意:我没有试过这个,但类似的重新排列帮助我摆脱了不必要的新行。您甚至可能必须将{% if ...放在最左侧,因此不会包含缩进。

答案 2 :(得分:0)

@Rudy Velthuis 答案 但是缩进了..(由于队列已满,无法编辑答案)

{% for c in site.data["contributors"] %}
    {% assign contributor = c[1] %}
    {% if contributor.role contains "author" %}
        {{contributor.name.given}} 
        {{contributor.name.family}}
    {% endif %}
{% endfor %}

我不知道为什么液体社区如此再次缩进..