Jekyll /液体循环很神秘

时间:2018-07-05 20:17:53

标签: loops jekyll liquid

我正在尝试使用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>

知道我在做什么错吗?

1 个答案:

答案 0 :(得分:5)

看看这个:

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

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

test1test2test3,您可以使用test[0]访问它们。

但是您需要,在这种情况下,您可以使用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 %}