为什么过滤器在Jekyll中不起作用?

时间:2018-01-21 07:24:18

标签: jekyll liquid github-pages

我有一个github页面,其_include目录有一个文件courses.html:

{% assign id = include.lessonID | split: '.' %}
{% assign courseID = id | first %}
{% assign node = site.data.courses | where: "id","1" %}

{% assign node = node[1] %}

{%- if node.id == empty -%}
  <h1> EMPTY NODE Warning</h1>
{%- else -%}
  <h2> DATA Found! </h2>
  ID: {{ node.id }}
{%- endif -%}

<p>CourseID: {{node.id}}</p>
<p>Name: {{ node.name }}</p>
<p>Link: {{ node.permalink }}</p>

{%- for node in site.data.courses -%}
  {%- if node.id == 1 -%}
    <p>{{ node.name }}</p>
    <p>{{ node.permalink }}</p>
  {%- endif -%}
{%- endfor -%}

_layout中名为courses.html:

的文件正在使用它
{% include courses.html post=page.lessonInfo.lessonID post=page %}

最后,文件lister.md包含以下内容:

---
layout: courses
title:  'Test'
lessonInfo:
  lessonID : 1.1
  modName: 'Installing RHEL Server'
  chapterName: 'Using Essential Tools'
---

# There should be some course list around here!

输出如下:

  

发现数据!
  ID:
  CourseID:
  名称:
  链接:
  RHCSA
  / rhcsa

所以,显然node变量不是空的,但是当我使用{{1}选择数组的正确元素时,我无法访问任何属性条款。

但是,在where循环中使用if语句使用第二部分时,这是有效的。我如何修复where子句?!

修改

@JJJ的建议确实解决了我的问题,但我现在有一个相关的问题。我无法用变量替换表达式for中的常量1!我尝试了正常的where子句(有和没有引号),但没有用。所以,我尝试了一个where表达式,它也不起作用:

where: "id","1"
  

不能工作!

{% assign node = site.data.courses | where: "id",courseID %}
  

这两者都没有。

我做错了什么以及如何解决?

1 个答案:

答案 0 :(得分:2)

首先,与大多数编程语言一样,数组是零索引的。 node[1]包含第二个节点,而不是第一个节点。你的意思可能是{% assign node = node[0] %}

其次,if node.id == empty不是您检查值是否存在的方式。只需unless nodenode.size == 0