【问题标题】:Liquid templates - accessing members by nameLiquid 模板 - 按名称访问成员
【发布时间】:2011-02-28 22:25:41
【问题描述】:

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

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

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

请看下面的例子:

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

我有一个名为name 的变量,它可以是'date''url'

如何在 ruby​​ 中制作相当于 post[name] 的液体?

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

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

啊!希望有更好的办法。

谢谢。

【问题讨论】:

    标签: ruby templates liquid jekyll


    【解决方案1】:

    我不知道我在想什么。

    post[name] 是一个完全有效的液体结构。所以上面的for-if代码可以这样替换:

    {{ post[name] }}
    

    我以为我试过了,但显然我没有。哦!

    Liquid 允许更高级的结构;以下是语法正确的,如果postelementcategories等被正确定义,将返回预期值:

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

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

    【讨论】:

      【解决方案2】:

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

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

      输出: 这是一个测试

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-03-22
        • 1970-01-01
        • 2011-01-18
        • 2012-10-26
        • 2021-11-29
        • 2010-12-08
        • 2013-09-24
        相关资源
        最近更新 更多