如何使用Liquid模板语言在布局中渲染模板?

时间:2009-08-15 23:03:24

标签: ruby-on-rails liquid

我正在尝试在液体布局中渲染液体模板(液体模板朗,而不是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”)

2 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:2)

在轨道上使用红宝石液体(特别是轨道3) - 我相信渲染液体模板的正确方法(并且还保留所有工作轨道正在为你做的)如下......

液体宝石本身为导轨提供了liquid_view,因此当您调用#render时,您可以连接导轨以寻找“液体”模板。此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自动包含默认的locals,这会为渲染调用另外添加液滴< / p>

def render(...)
  options[:locals] = options.fetch(:locals, {}).merge(liquid_view_assigns)
  super
end