如何访问自定义Liquid模板标签内的全局Sinatra配置?

时间:2011-09-29 14:21:52

标签: ruby sinatra liquid

我正在尝试创建一个这样的自定义Liquid模板标签:

class ScriptLoader < Liquid::Tag       
    def initialize(tag_name, filename, tokens)
      super 
      @file = filename
    end
    def render(context)
      settings.cdn_url << 'script/' << @file
    end    
 end

 Liquid::Template.register_tag('script', ScriptLoader)

以上代码位于外部文件位置:(project_dir)/tags/scriptloader.rb

此文件包含在app.rb启动文件中。

问题是即使在使用set方法在app.rb文件中添加配置后,settings变量仍为空。

在我的模板中调用{%script'myfile'%}时的响应:

Liquid error: undefined method `cdn_url' for Sinatra::Application:Class

非常感谢任何想法或指导!

谢谢!

1 个答案:

答案 0 :(得分:0)

好的,所以我设法解决了这个问题。

我在app.rb中创建了一个配置对象,它从文件中加载配置,迭代它们并为每个配置调用set()方法。这也将config key =&gt;值集存储在类常量哈希中。

我可以访问这样的值:

class ScriptLoader < Liquid::Tag       
    def initialize(tag_name, filename, tokens)
      super 
      @file = filename
    end
    def render(context)
      MyObject::CONFIG[:cdn_url] << 'script/' << @file
    end    
 end