Jekyll中where过滤器失效问题求助
解决Jekyll中
where过滤器处理数组字段的问题 我懂你现在的困扰——当colleague_role是数组类型时,直接用where过滤器匹配字符串肯定行不通,因为Jekyll的where是严格的精确匹配规则,数组和字符串属于不同类型,自然匹配不上。下面给你两个可行的解决方案:
方法一:用where_exp自定义匹配条件(推荐)
where_exp允许你编写自定义的Liquid表达式,刚好能用来检查数组是否包含目标值,把代码改成这样就行:
{% for post in site.help | where_exp: "item", "item.colleague_role contains 'All colleagues'" %} <li><a href="{{ post.url | prepend: site.baseurl }}">{{ post.title }} {{ post.colleague_role }}</a></li> {% endfor %}
这里的contains操作符对数组生效时,会自动检查数组里是否存在"All colleagues"这个元素,完美适配你的场景,就算以后colleague_role里需要添加多个角色,这个写法也能正常工作。
方法二:直接取数组第一个元素匹配(仅适用于单元素数组)
看你的例子里colleague_role都是只有一个元素的数组,那也可以直接定位数组的第一个元素来匹配,代码如下:
{% for post in site.help | where:"colleague_role[0]","All colleagues" %} <li><a href="{{ post.url | prepend: site.baseurl }}">{{ post.title }} {{ post.colleague_role }}</a></li> {% endfor %}
不过这个方法有局限性,如果以后你的文章里colleague_role需要添加多个角色,这个写法就会失效,所以更推荐第一种方法。
另外再提醒你:要确保前置元数据的YAML格式是正确的,colleague_role的数组写法必须是colleague_role: - All colleagues(短横线后面一定要有空格),不然Jekyll可能会把它识别成字符串而不是数组,过滤器也会因此出问题。
内容的提问来源于stack exchange,提问作者Matt Tyas
相关产品推荐
相关产品推荐

