为什么这个Jekyll Liquid不在哪里过滤?

Jus*_*tin 7 ruby jekyll

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

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

但它会输出每个帖子.我不清楚我做错了什么.

Dav*_*uel 10

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

---
author: toto
...
---
Run Code Online (Sandbox Code Playgroud)

如果你想要作者== 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>
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

重新编辑:贾斯汀是对的我不需要我的两个变量(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>
Run Code Online (Sandbox Code Playgroud)

更好!