Líquido para el bucle no funciona correctamente en Jekyll
Pregunta
Estoy usando un líquido para bucle en Jekyll para mostrar el contenido de la página basado en esta estructura 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
Este es el bucle for:
{% for item in page.work_left %}
{{ item.image }}
{% endfor %}
item.image
no dará lugar a las cuerdas /images/isitgo.png
y /images/disko.png
ser salida.
Si en cambio lo hago {{ item }}
, aquí está el resultado:
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"
}
¿Qué está causando esto?
Solución
Está obteniendo esos resultados debido a la forma en que las matrices asociativas de analgésicos líquidos, que es lo que work_left
es. En cada iteración obtendrá dos elementos: la "clave" y el "valor".
Te advierto que en algunas ocasiones esto puede darte problemas. En particular, el orden en que aparecerán los artículos no está garantizado: Isitgo podría aparecer después de Disco. (Esto depende de la versión de Ruby que esté utilizando, que yo sepa).
Si quieres asegurarte de que siempre obtengas el contenido de work_left
En el mismo orden, debes usar Lista de matrices asociativas En lugar de una matriz asociativa de matriz asociativa, como lo hace. Así es como se vería:
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
Entonces el código para imprimirlos:
{% for item in page.work_left %}
{{ item.name }}
{{ item.image }}
{% endfor %}
Otros consejos
Parece que el elemento creado con un bucle for debe tratarse como una matriz.
Entonces para mi caso:
{% for item in page.work_left %}
{{ item[0] }}
{% endfor %}
Emitiría el primer elemento de la matriz devuelta (2 ítems), que es una cadena: isitgo disko
. {{ item[1].image }}
accedería al .image
Propiedad del segundo elemento de la matriz devuelta, una variable, y se mostraría /images/isitgo.png /images/disko.png
.