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。在每次迭代中,您都会获得两项:“键”和“值”。

我警告你,在某些情况下,这会给你带来麻烦。值得注意的是,项目出现的顺序并不能保证 - isitgo 可能出现在磁盘之后。(据我所知,这取决于您使用的 ruby​​ 版本)。

如果要确保始终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{{ item[1].image }}将访问.image返回数组的第二项的属性,一个变量,它会显示/images/isitgo.png /images/disko.png.

于 2012-01-14T16:46:16.667 回答