2012-01-14 56 views
4

正常工作,我使用的是液体回路杰奇在此基础上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" 
} 

是什么造成的?

回答

17

由于液体分析关联数组的方式,你会得到这些结果 - 这就是work_left。在每次迭代中,您会得到两个项目:“键”和“值”。

我警告你,在某些情况下,这会给你带来问题。值得注意的是,项目出现的顺序并不能保证 - isitgo可能会出现在磁盘之后。 (据我所知,这取决于你使用的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 %} 
+0

哇!非常感谢!已经尝试了很多半个小时,但在YAML中并不知道邻接'-'。 +1 – kaiser 2013-07-12 17:57:54

2

看来使用for循环创建的项目必须被视为一个数组。

所以对于我的情况:

{% for item in page.work_left %} 
    {{ item[0] }} 
{% endfor %} 

将输出返回(2项)阵列,它是一个字符串的第一个元素:isitgo disko{{ item[1].image }}将访问返回数组的第二项变量的.image属性,并且它将显示/images/isitgo.png /images/disko.png