我在Jekyll中使用Liquid for循环来显示基于此YAML结构的页面内容:
work_left:
isitgo:
image: /images/isitgo.png
caption: isitgoonair.net homepage
description: a website
disko:
image: /images/disko.png
caption: Disko
description: a website
work_right:
qfi:
image: /images/qfi.png
caption: qfi.im
description: a website
这是for循环:
{% for item in page.work_left %}
{{ item.image }}
{% endfor %}
item.image
不会导致输出字符串/images/isitgo.png
和/images/disko.png
如果我只做{{ item }}
,那么结果就是:
isitgo
{
"image"=>"/images/isitgo.png",
"caption"=>"isitgoonair.net homepage",
"description"=>"an awesome website i made"
}
disko
{
"image"=>"/images/disko.png",
"caption"=>"Disko",
"description"=>"that site"
}
造成这种情况的原因是什么?
答案 0 :(得分:17)
由于液体分析关联数组的方式,你得到的结果就是work_left
。在每次迭代中,您将获得两个项目:“密钥”和“值”。
我警告你,在某些情况下,这会给你带来麻烦。值得注意的是,不保证项目出现的顺序 - isitgo可能出现在disko之后。 (据我所知,这取决于您使用的ruby版本。)
如果您想确保始终以相同的顺序获取work_left
的内容,则必须使用list of associative arrays而不是关联数组的关联数组,就像您在哪里一样。以下是它的外观:
work_left:
- name: isitgo
image: /images/isitgo.png
caption: isitgoonair.net homepage
description: a website
- name: disko
image: /images/disko.png
caption: Disko
description: a website
work_right:
- name: qfi
image: /images/qfi.png
caption: qfi.im
description: a website
然后打印它们的代码:
{% for item in page.work_left %}
{{ item.name }}
{{ item.image }}
{% endfor %}
答案 1 :(得分:2)
看来用for循环创建的项目必须被视为数组。
所以我的情况:
{% for item in page.work_left %}
{{ item[0] }}
{% endfor %}
将输出返回的(2项)数组的第一个元素,该数组是一个字符串:isitgo disko
。 {{ item[1].image }}
将访问返回数组的第二项的.image
属性,即变量,它将显示/images/isitgo.png /images/disko.png
。