Plantillas de líquido: acceder a los miembros por su nombre
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.
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