有条件地限制for循环的结果

时间:2015-09-25 17:06:32

标签: jekyll liquid

我想在jekyll博客中显示最近10篇帖子,假设他们的show属性为true

e.g。 YAML前面的内容可能看起来像这样

---
title: "SO question"
categories: question
show: false
---

在我的index.html文件中,我目前有以下

{% for post in site.posts limit:10 %} 
  {% if post.show %}
    <!-- display post -->
  {% endif %}
{% endfor %}

但如果过去10的一个帖子的show属性为false,那么页面上只会显示9个帖子。

Jinja2支持for-if语法,如下所示:http://jinja.pocoo.org/docs/dev/templates/#for。这可以解决我的问题,但不幸的是液体不支持。

使用液体如何调整帖子属性并确保始终显示10个帖子?

3 个答案:

答案 0 :(得分:8)

您必须首先制作包含show变量设置为true的帖子的数组。

{% assign publishedPosts = site.posts | where: 'show', 'true' %}

然后你可以做一个

{% for p in publishedPosts limit:10 %}

答案 1 :(得分:1)

只是指出@matrixanonaly 的答案,如果不能使用“where”过滤器,它可以很好地与一个小 tweek 一起使用。我还不能发表评论,但我想我会修复它,这样它就可以帮助我。

 {% assign count = 0 %}
   {% for post in site.posts limit:10 %} 
     {% if post.show %}
         {% if count < 10 %} 
         <!-- display post -->
         {% assign count = count | plus: 1 %}
         {% endif %}
   {% endif %}
{% endfor %}

我需要这个,因为我在标签中使用了 contains。由于某种原因,增量不起作用。

答案 2 :(得分:0)

assign值设置为show的帖子中,尝试将true用于计数器变量。这是一些简单的方法之一。

{% assign count = 0 %}
   {% for post in site.posts limit:10 %} 
     {% if post.show %}
         {% if count < 10 %} 
         <!-- display post -->
         {% increment count %}
         {% endif %}
   {% endif %}
{% endfor %}

应该工作,但我现在没有Jekyll安装来检查,或者如果增量不起作用,请使用{% assign count = count + 1 %}

Shopify Liquid syntax manual is helpful

或者, 我有一种感觉你只想设置一个帖子是否应该发布,在这种情况下你可以使用内置的在 published变量中。只需在frontmatter中执行published : truepublished : false即可。阅读有关预定义变量here的更多信息。