Jekyll:如何将Ruby对象传递给模板?

例如,假设我想生成这个数组:
random_numbers = []
1000.times { random_numbers << rand(2) }

并将其传递给模板,以便我可以从Liquid访问它:

{% for num in random_numbers %} 
  ... here I'd use logic around the number to generate something.
{% endfor %}

注意:我想在Ruby中动态生成数组.在模板中,我想要一个我可以迭代的数组,我不想要一个字符串.

怎么能在杰基尔做到这一点?

解决方法

好吧,你需要一个插件https://github.com/mojombo/jekyll/wiki/Plugins

如果您乐意将逻辑放在插件中,您可以在自定义Liquid :: Tag中进行,但您的要求听起来像他们需要一个生成器,这没关系.我只是把它扔在一起,它似乎按照你的意愿工作:

module Jekyll

class RandomNumberGenerator < Generator

  def generate(site)
    site.pages.each do |page|
      a = Array.new
      1000.times { a << rand(2) }
      page.data['random_numbers'] = a
    end
  end

end

end

应该放在你的_plugins /目录中(如rand.rb或其他东西).在您的模板中,您可以这样做

<ul>
    {% for number in page.random_numbers %}
        <li>{{ number }}</li>
    {% endfor %}
</ul>

或者不管你喜欢什么.我假设您希望每个页面都有一组不同的数字 – 但是如果您想为整个网站设置一个数字,您可以轻松地生成次数组,然后将其附加到网站对象或每个页面.

这不适用于Github Pages上的自动生成(由于显而易见的原因,它们不允许自定义插件),但这应该不是问题 – 即使您使用的是Github Pages,也有很多解决方法.

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...