如何从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
答案 0 :(得分:1)
事实证明,这是一些红色的鲱鱼
variable
实际上是Drop,不是正常的哈希值。具体来说,它是一个DocumentDrop,它将to_s
委托给Document类。 to_s
的实现会打印出Document
的{{1}},output
或content
。 "NO CONTENT"
和output
要么是空格字符,要么是换行符,这就是输出的全部内容。这是因为文件仅存在于最前面,因此没有实际内容。content
,它只有一个空字符串表示形式。variable
至少我现在不像红宝石新手了。
答案 1 :(得分:0)
尝试将{% assign variable = site.variables | where "someval", "true" %}
更改为{% assign variable = site.variables | where: "someval", "true" %}
。
此外,根据docs,variable
似乎不是一个选项。如果要传递更多信息,则需要使用site.data
之类的东西或jekyll初始值设定项中定义的信息(通常称为_config.yml
)。