5

Jekyllでリキッド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"
}

これは何が原因ですか?

4

2 に答える 2

17

液体が連想配列を解析する方法のために、これらの結果が得られています-それが何であるかwork_leftです。各反復で、「キー」と「値」の2つのアイテムを取得します。

場合によっては、これにより問題が発生する可能性があることを警告します。特に、アイテムが表示される順序は保証されていません。isitgoはdiscoの後に表示される可能性があります。(これは、私が知る限り、使用しているルビーのバージョンによって異なります)。

work_leftの内容を常に同じ順序で取得するようにしたい場合は、連想配列の連想配列ではなく、連想配列のリストを使用する必要があります。外観は次のとおりです。

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 %}
于 2012-01-15T11:25:22.727 に答える
3

forループで作成されたアイテムは配列として扱われる必要があるようです。

だから私の場合:

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

返された(2項目)配列の最初の要素である文字列を出力します:isitgo disko。返された配列の2番目の項目である変数{{ item[1].image }}のプロパティにアクセスし、を表示します。.image/images/isitgo.png /images/disko.png

于 2012-01-14T16:46:16.667 に答える