Jekyll在where_exp中使用管道运算符

时间:2019-07-11 08:58:09

标签: filtering jekyll liquid

我正在使用Jekyll 3.8。我的帖子包含date个属性集。其中有些包含过去的值(例如2001-01-01),有些包含将来的值(例如2109-12-31)。

我想要实现的是仅显示过去的帖子(因此它们的日期小于now)。现在,我设法使用:

{% capture current_time %}{{'now' | date: '%s'}}{% endcapture %}

{% for post in site.posts %}
  {% capture post_time %}{{post.date | date: '%s'}}{% endcapture %}
  {% if post_time >= current_time %}
           DISPLAY THE ITEM
  {% endif %}
{% endfor %}

但是效率不高。

我想使用where_exp过滤器来完成它。现在-有可能吗? 我的草稿如下:

{% capture current_time %}{{'now' | date: '%s'}}{% endcapture %}
{% assign filtered_posts = site.posts| where_exp:"post","post.date | date: '%s' >= current_time" %}

{% for post in filtered_posts %}
   DISPLAY THE ITEM
{% endfor %}

但是我收到Liquid Exception: Liquid error (line 5): comparison of Time with String failed in source.md

我想问题出在| date: '%s'中的{% assign filtered_posts = site.posts| where_exp:"post","post.date | date: '%s' >= current_time" %}

因此:

  1. 我什至可以在where_exp表达式中使用过滤器(管道)吗?
  2. 如果不是,那么-我能以某种方式将post.date转换为不带过滤器的字符串,还是将current_time转换为字符串并同时进行比较?

1 个答案:

答案 0 :(得分:1)

由于比较表达式中的管道,where_exp引发错误,因此我无法重现您的错误。

尽管如此,您可以将作为Time对象的post.date与site.time(生成时间)进行比较,以获取过去的帖子。

{% assign filtered_posts = site.posts | where_exp: "post","post.date <= site.time" %}