液体模板 - 按名称访问成员

时间:2010-06-07 22:28:02

标签: ruby templates liquid jekyll

我正在使用Jekyll来创建新博客。它使用下面的Liquid

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

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

请参阅以下示例:

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

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

如何在红宝石中制作相当于post[name]的液体?

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

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

哎呀!我希望有更好的方法。

感谢。

2 个答案:

答案 0 :(得分:2)

我不知道我在想什么。

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

{{ post[name] }}

我以为我试过这个,但显然我没有。 D'哦!

Liquid甚至承认更高级的构造;以下一个在语法上是正确的,如果正确定义了postelementcategories等,它将返回预期值:

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

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

答案 1 :(得分:1)

实际上,这对我不起作用。我尝试了一堆不同的组合,最终起作用的是

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

输出: 这是一个测试

相关问题