Pregunta

Estoy usando Jekyll Para crear un nuevo blog. Usa Líquido debajo.

Jekyll define ciertas "variables": site, content, page, post y paginator. Estas "variables" tienen varios "miembros". Por ejemplo, post.date devolverá la fecha de una publicación, mientras post.url devolverá su URL.

Mi pregunta es: ¿Puedo acceder al miembro de una variable usando otra variable como nombre del miembro?

Vea el siguiente ejemplo:

{% if my_condition %}
  {% assign name = 'date' %}
{% else %}
  {% assign name = 'url' %}
{% endif %}

Tengo una variable llamada name que es o 'date' o 'url'.

¿Cómo puedo hacer que el líquido equivalente a post[name] ¿En Ruby?

La única forma que he encontrado es usar un for bucle para iterar sobre todos los pares (valor clave) de post. ¡Tener cuidado! Es bastante horrible:

{% for property in post %}
  {% if property[0] == name %}
    {{ property[1] }}
  {% endif %}
{% endfor %}

¡ARGH! Espero que haya una mejor manera.

Gracias.

¿Fue útil?

Solución

No sé lo que estaba pensando.

post[name] es una construcción líquida perfectamente válida. Entonces, el código For-if anterior puede ser reemplazado por esto:

{{ post[name] }}

Pensé que intenté esto, pero aparentemente no lo hice. D'OH!

Liquid admite construcciones aún más elegantes; el siguiente es sintácticamente correcto y devolverá el valor esperado si post, element, categories, etc. se definen correctamente:

{{ post[element.id].categories[1].name }}

Estoy muy sorprendido con líquido. Definitivamente continuará investigando.

Otros consejos

En realidad, esto no funcionó para mí. Probé un montón de combinaciones diferentes y lo que finalmente funcionó fue

<!-- object myObj.test has the string value "this is a test" -->
{% assign x = 'test' %}
{{ myObj.[x] }}

Salida: esta es una prueba

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