12

我正在尝试在液体布局中呈现液体模板(液体模板语言,而不是 CSS 液体布局的东西)。我似乎无法让布局部分呈现。目前使用:

assigns = {'page_name' => 'test'}
@layout = Liquid::Template.parse(File.new(@theme.layout.path).read)
@template = Liquid::Template.parse(File.new(self.template.path).read)

@rend_temp = @template.render(assigns)
@rend_layout = @layout.render({'content_for_layout' => @rend_temp})

render :text => @rend_layout, :content_type => :html

生成的页面 HTML 显示“模板”以液体形式呈现,但它没有被布局包裹(用呈现的模板替换布局中的“content_for_layout”)

4

2 回答 2

9

只是为了让其他人知道谁遇到了这个问题,上面发布的代码确实有效,问题在于名为 @template 的变量。我将@template 和@layout 重命名为@_tempalte 和@_layout,一切都按预期工作。

于 2009-08-17T01:15:03.817 回答
2

对于在rails(尤其是rails 3)上使用ruby中的液体-我相信渲染液体模板的正确方法(并维护所有工作rails正在为您做的)如下......

液体 gem 本身为 rails 提供了一个liquid_view,因此您可以在调用 #render 时连接 rails 以查找“液体”模板。此liquid_view 仅适用于rails 2.3,但可以通过进行以下更新轻松更新为适用于rails 3

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

这可以在这里看到 --> https://github.com/danshultz/liquid/commit/e27b5fcd174f4b3916a73b9866e44ac0a012b182

然后正确渲染你的液体视图只需调用

render :template => "index", :layout => "my_layout", :locals => { liquid_drop1 => drop, liquid_drop2 => drop }

在我们的应用程序中,由于我们有一些常见的液体属性,我们已经覆盖了基础控制器中的“render”方法,通过引用 #liquid_view_assigns 自动包含默认的局部变量,它为渲染调用额外添加了液滴

def render(...)
  options[:locals] = options.fetch(:locals, {}).merge(liquid_view_assigns)
  super
end
于 2011-11-07T14:56:42.623 回答