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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top