为什么这个Jekyll Liquid没有过滤器?

时间:2014-07-11 15:40:36

标签: ruby jekyll

我正在尝试输出特定作者的博客帖子列表。我试过这个Jekyll过滤器:

{% for post in (site.posts | where:"author", "mike") %}
  {{ post.title }}
{% endfor %}

但它会输出每一篇文章。我不清楚我做错了什么。

3 个答案:

答案 0 :(得分:10)

假设你的帖子作者在你面前,就像这样:

---
author: toto
...
---

如果你想要发表作者= = toto的最后一篇文章,那就做:

{% assign counter = 0 %}
{% assign maxPostCount = 2 %}
<ul>
{% for post in site.posts %}
  {% if post.author == 'toto' and counter < maxPostCount %}
    {% assign counter=counter | plus:1 %}
    <li>{{ counter }} - {{ post.title }}</li>
  {% endif %}
{% endfor %}
</ul>

Et hop!

编辑: 另一个使用where过滤器而不是if子句的解决方案:

{% assign posts = site.posts | where: "author", "toto" %}
{% assign counter2 = 0 %}
{% assign maxPostCount2 = 3 %}
<ul>
{% for post in posts %}
  {% if counter2 < maxPostCount2 %}
    {% assign counter2=counter2 | plus:1 %}
    <li>{{ counter2 }} - {{ post.title }}</li>
  {% endif %}
{% endfor %}
</ul>

重新编辑:Justin是对的,我不需要我的两个变量(counter2和maxPostCount2),我可以使用Liquid for loop limit:n 选项。

{% assign posts = site.posts | where: "author", "toto" %}
<ul>
{% for post in posts limit:3 %}
  <Ol>{{ post.title }}</ol>
{% endfor %}
</ul>

更好!

答案 1 :(得分:2)

您需要先为过滤的项目assign执行<{1}}

{% assign posts = site.posts | where:"author", "mike" %}
{% for post in posts %}  
   {{ post.title }}
{% endfor %}

答案 2 :(得分:0)

似乎过滤器只能在输出标签内使用({{}}包围的过滤器。这意味着您可以使用以下内容:

{{ site.posts | where "author", "mike" }}

但你不能按照你的方式使用它。

来源:liquid documentation on Filters