Jekyll / liquid for 循环是神秘的

Jekyll / liquid for loop being mysterious

我正在尝试使用 Jekyll 中的 for 循环来呈现示例数据。我可以引用 markdown 对象或任何直接调用的对象,但是当我使用 for 循环时它不起作用。这是我遇到的问题的示例:

带有数据的 markdown 文件:

tests:  
  test1:  
    number: 1 . 
  test2:  
    number: 2 . 
  test3:  
    number: 3 . 

sessions.html:

<p>{{ page.tests.test1.number }}</p>
<p>{{ page.tests.test2.number }}</p>
<p>{{ page.tests.test3.number }}</p>

这输出到:

<p>1</p>
<p>2</p>
<p>3</p>

如果我这样做:

{% for test in page.tests %}
  <p>{{ test.number }}</p>
{% endfor %}

我得到:

<p></p>
<p></p>
<p></p>

我什至可以做到:

{% for test in page.tests %}
  <p>{{ test }}</p>
{% endfor %}

并得到:

<p>test1{"number"=>1}</p>
<p>test2{"number"=>2}</p>
<p>test3{"number"=>3}</p>

知道我做错了什么吗?

看看这个:

{% for test in page.tests %}
  <p>{{ test.number }}</p>
{% endfor %}

您正在迭代 page.tests。由于 page.tests 是散列而不是列表,因此您正在迭代该对象的 键值对 。 (参见 this topic)。

test1test2test3,您可以通过test[0].[=26访问它们=]

但是你需要,在这种情况下你可以使用test[1],要获取号码,你可以调用test[1].number:

{% for test in page.tests %}
  <p>{{ test[1].number }}</p>
{% endfor %}

您将获得与第一个示例相同的输出。

或者,您可以尝试定义一个 列表,而不是 test1test2test3

tests:
  - number: 1
  - number: 2
  - number: 3

这样,您的代码也可以工作:

{% for test in page.tests %}
  <p>{{ test.number }}</p>
{% endfor %}