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

发布于 2024-12-07 09:00:16 字数 669 浏览 0 评论 0原文

我正在尝试创建一个如下所示的自定义 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 文件中添加配置之后,设置变量还是空的。

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

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

任何想法或指导将不胜感激!

谢谢!

I'm trying to create a custom Liquid template tag like this:

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)

The above code is in an external file location at : (project_dir)/tags/scriptloader.rb

This file is being included in the app.rb startup file.

The problem though is that the settings variable is empty, even after adding the configs in the app.rb file using the set method.

The response when calling {% script 'myfile' %} in my templates:

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

Any ideas or guidance would be greatly appreciated!

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

无语# 2024-12-14 09:00:16

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

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

我可以这样访问这些值:

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

Ok, so I've managed to work around the issue.

I created a config object in app.rb that loads the configs from a file, iterates over them and calls the set() method for each. This also stores the config key=>value sets in a class constant hash.

I can access the values like this:

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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文