我正在尝试使用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>
知道我在做什么错吗?
答案 0 :(得分:5)
看看这个:
{% for test in page.tests %}
<p>{{ test.number }}</p>
{% endfor %}
您正在遍历page.tests
。由于page.tests
是散列而不是列表,因此您要遍历该对象的键-值对。 (请参见this topic)。
键为test1
,test2
和test3
,您可以使用test[0]
访问它们。
但是您需要值,在这种情况下,您可以使用test[1]
,并且可以通过拨打test[1].number
来获取号码:
{% for test in page.tests %}
<p>{{ test[1].number }}</p>
{% endfor %}
您将获得与第一个示例相同的输出。
或者,您可以尝试定义列表:
,而不是test1
,test2
和test3
tests:
- number: 1
- number: 2
- number: 3
这样,您的代码也将起作用:
{% for test in page.tests %}
<p>{{ test.number }}</p>
{% endfor %}