自定义液体块检索上下文变量

时间:2018-07-13 18:33:40

标签: ruby jekyll liquid

如何从jekyll markdown的自定义Liquid Block中检索分配的变量?

我已经读过using assignments in templates,但显然我缺少一些简单的东西。

编辑:这仅在Jekyll变量中发生,在液体中设置的基本变量不发生。

不起作用:

降价中的液体障碍物:

{% assign variable = site.variables | where "someval", "true" %}

{% customblock variable %}
{% endcustomblock %}

Jekyll插件:

module Jekyll
  module Tags
    class CustomBlockTag < Liquid::Block

      def initialize(tag_name, variable_name, options)
        super
        @variable = variable_name
      end

      def render(context)
          puts context.scopes
          puts context.key?(@variable)
          puts context.find_variable(@variable)
          puts context[@variable] 
      end
    end
  end
end

Liquid::Template.register_tag('customblock', Jekyll::Tags::CustomBlockTag)

输出:

{..., "variable"=> {<another map>} }
true
<blank>
<blank>

我不经常使用ruby,但是据我在source中看到的那样,它只是包装了字典查找。我在这里想念什么?


以下可以正常使用

降价中的液体障碍物:

{% assign variable = "1" %}

{% customblock variable %}
{% endcustomblock %}

Jekyll插件:

module Jekyll
  module Tags
    class CustomBlockTag < Liquid::Block

      def initialize(tag_name, variable_name, options)
        super
        @variable = variable_name
      end

      def render(context)
          puts context.scopes
          puts context.key?(@variable)
          puts context.find_variable(@variable)
          puts context[@variable] 
      end
    end
  end
end

Liquid::Template.register_tag('customblock', Jekyll::Tags::CustomBlockTag)

输出:

{..., "variable"=>"1"}
true
1
1

2 个答案:

答案 0 :(得分:1)

事实证明,这是一些红色的鲱鱼

  • 我的variable实际上是Drop,不是正常的哈希值。具体来说,它是一个DocumentDrop,它将to_s委托给Document类。
  • to_s的实现会打印出Document的{​​{1}},outputcontent
  • 在我的情况下,"NO CONTENT"output要么是空格字符,要么是换行符,这就是输出的全部内容。这是因为文件仅存在于最前面,因此没有实际内容。
  • 通过Drop接口访问前件。所以我实际上得到的是content,它只有一个空字符串表示形式。
  • 事不宜迟,访问前沿事务数据variable

至少我现在不像红宝石新手了。

答案 1 :(得分:0)

尝试将{% assign variable = site.variables | where "someval", "true" %}更改为{% assign variable = site.variables | where: "someval", "true" %}

此外,根据docsvariable似乎不是一个选项。如果要传递更多信息,则需要使用site.data之类的东西或jekyll初始值设定项中定义的信息(通常称为_config.yml)。