I'm trying to use where_exp
to filter Jekyll pages based on two categories using or
operator:
{% assign sortedPages = site.pages | sort:"date" | reverse | where_exp:"page","page.categories contains 'design-pattern'" %}
But I'm getting this error:
Expected end_of_string but found pipe
Ar or
/and
operators really supported? I can't figure out how to filter pages using where_exp
as shown in my code snippet.
I've managed to solve my issue with some workarounds... It's not a very elegant solution, but as Jekyll isn't about creating actual software architecture... For now, it works flawlessly:
{% assign patterns = "" | split,"" %}
{% for page in site.pages %}
{% if page.categories contains "design-pattern" or page.categories contains "anti-pattern" %}
{% assign patterns = patterns | push:page %}
{% endif %}
{% endfor %}
{% assign sortedPages = patterns | sort:"date" | reverse %}
I was unable to replicate the error message you included with your original question. However, as far as filtering based on multiple conditions goes, it is supported. You can also put all of your filters together. The result is much cleaner code 😊
If one wants to set a variable named "sortedPages" equal to "site.pages", but with the following filters:
they can do so with the following one-liner:
{% assign sortedPages = site.pages | sort:"date" | reverse | where_exp: "item", "item.categories contains 'design-pattern' or item.categories contains 'anti-pattern'" %}
Splitting up statements across multiple lines is also supported. Doing so can sometimes improve readability:
{%
assign sortedPages = site.pages
| sort:"date"
| reverse
| where_exp: "item", "item.categories contains 'design-pattern' or item.categories contains 'anti-pattern'"
%}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With