繁体   English   中英

如何用液体代替erb?

[英]How to replace erb with liquid?

我想在Rails应用程序中使用液体。 我已经安装了宝石。 为了在所有模板中使用,我创建了一个库( lib/liquid_view.rb:

class LiquidView
  def self.call(template)
    "LiquidView.new(self).render(#{template.source.inspect}, local_assigns)"
  end

  def initialize(view)
    @view = view
  end

  def render(template, local_assigns = {})
    @view.controller.headers["Content-Type"] ||= 'text/html; charset=utf-8'

    assigns = @view.assigns

    if @view.content_for?(:layout)
      assigns["content_for_layout"] = @view.content_for(:layout)
    end
    assigns.merge!(local_assigns.stringify_keys)

    controller = @view.controller
    filters = if controller.respond_to?(:liquid_filters, true)
                controller.send(:liquid_filters)
              elsif controller.respond_to?(:master_helper_module)
                [controller.master_helper_module]
              else
                [controller._helpers]
              end

    liquid = Liquid::Template.parse(template)
    liquid.render(assigns, :filters => filters, :registers => {:action_view => @view, :controller => @view.controller})
  end

  def compilable?
    false
  end
end

并添加了以下初始化程序( config/initializers/liquid_template_handler.rb:

require 'liquid_view'
ActionView::Template.register_template_handler :liquid, LiquidView

PS:我已经按照这些指示进行了。

现在,如果使用液体my_template.html.liquid重命名模板文件,则<%= stylesheet_link_tag 'mycss' %>停止工作,但更重要的是{{user.first_name}}变量不会显示。 在我的控制器中,我有@user = current_user

我想念什么?

我的意图是在某些模板中用liquid完全覆盖erb ,因此理想情况下它应该像erb一样工作(在某种意义上,我可以从控制器传递变量并将其简单地呈现在模板中,而无需使用Liquid::Template.parse(@page.template) ,但我不了解它如何在基于文件的模板上工作。

PS:我还将[this] gem( https://github.com/yoolk/themes_on_rails )用于单独的模板。 我不确定它对此有什么影响。

PPS:我已经看到了这一点,但由于它是旧版本的Rails,因此并不适用,并且我没有使用prepend。

PPPS:我正在使用Ruby 2.2.2和Rails 4.2

我希望这不是您想的问题。 您可以按照这里所说的方法检查Github描述

您是否创建了一个Drop来访问@user?

https://github.com/Shopify/liquid/wiki/Introduction-to-Drops

Liquid是一个安全的模板系统,因此我们可以解释用户创建的后端模板。 要访问任何非平凡的东西(数字,字符串,哈希或数组),您需要一个Drop,这是一个受控接口,用于定义模板可以访问的内容。

这是设计使然且出于安全原因。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM