Jekyll, используя оператор трубы в where_exp - PullRequest
0 голосов
/ 11 июля 2019

Я использую 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 Ответ

1 голос
/ 11 июля 2019

Я не могу воспроизвести вашу ошибку, поскольку where_exp выдает ошибку из-за канала в выражении сравнения.

Тем не менее, вы можете сравнить post.date, который является объектом Time, с site.time (временем генерации), чтобы получить сообщения, которые были в прошлом.

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