Liquid 模板 - 按名称访问成员

kik*_*ito 4 ruby templates liquid jekyll

我正在使用Jekyll创建一个新博客。它在下面使用液体

Jekyll 定义了某些“变量”:sitecontentpagepostpaginator这些“变量”有几个“成员”。例如,post.date将返回帖子的日期,而post.url将返回其 url。

我的问题是:我可以使用另一个变量作为成员名称来访问变量的成员吗?

请参见以下示例:

{% if my_condition %}
  {% assign name = 'date' %}
{% else %}
  {% assign name = 'url' %}
{% endif %}
Run Code Online (Sandbox Code Playgroud)

我有一个名为name'date'的变量'url'

如何使post[name]红宝石中的液体等价?

我发现的唯一方法是使用for循环来迭代 的所有对(键值)post。谨防!这是相当可怕的:

{% for property in post %}
  {% if property[0] == name %}
    {{ property[1] }}
  {% endif %}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

啊!我希望有更好的方法。

谢谢。

kik*_*ito 5

我不知道我在想什么。

post[name]是一种完全有效的液体结构。因此上面的 for-if 代码可以替换为:

{{ post[name] }}
Run Code Online (Sandbox Code Playgroud)

我以为我尝试过这个,但显然我没有。噢!

Liquid 甚至可以容纳更奇特的结构;post下面的语句在语法上是正确的,如果、elementcategories等定义正确,则将返回预期值:

{{ post[element.id].categories[1].name }}
Run Code Online (Sandbox Code Playgroud)

我对 Liquid 感到非常惊讶。肯定会继续调查。