Jekyll中where筛选器失效及变量替换失败问题求助
问题2:Where过滤器中使用变量代替常量无效
这个问题几乎都是数据类型不匹配导致的:
- 你通过
split方法得到的courseID是字符串类型(split返回的所有结果都是字符串) - 而
site.data.courses中的id大概率是数字类型(比如你在数据文件里写的是id: 1而非id: "1")
字符串和数字直接比较是不相等的,所以不管用where还是where_exp都匹配不到元素。
给你两种可行的修复方案:
方案1:将courseID转换为数字类型
用plus: 0过滤器把字符串转成数字,让两边类型一致:
{% assign id = include.lessonID | split: '.' %} {% assign courseID = id | first | plus: 0 %} {% assign node = site.data.courses | where: "id", courseID | first %}
方案2:在where_exp中统一类型后比较
如果不想转换变量类型,可以在where_exp的表达式里把两边都转成相同类型再比较,比如都转成字符串:
{% assign id = include.lessonID | split: '.' %} {% assign courseID = id | first %} {% assign node = site.data.courses | where_exp: "selNode", "selNode.id | to_s == courseID" | first %}
另外可以验证一下courseID的值是否正确,比如在模板里加一行{{ courseID | inspect }},看看输出的是字符串还是数字,同时检查site.data.courses里的id格式,确保两者的类型或值能匹配上。
内容的提问来源于stack exchange,提问作者Somenath Sinha
相关产品推荐
相关产品推荐

