2012-01-14 57 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