どのようにして液体テンプレート言語を使用してレイアウト内のテンプレートをレンダリングすることができますか?

StackOverflow https://stackoverflow.com/questions/1283083

  •  16-09-2019
  •  | 
  •  

質問

私は液体のレイアウト(リキッドテンプレートLANG、ない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」を置き換える)「テンプレート」は、液体、微細にレンダリングすることを示しているが、それは、レイアウトでラップされていません
役に立ちましたか?

解決

ただ、誰がこの問題に出くわす誰知っているように、上に掲載のコードが実際に作業を行います。

、問題は変数の名前@templateです。私は@templateと改名し、@_tempalteする@layout、そして予想通り@_layout、すべてが機能します。

他のヒント

私は

...次のように液体のテンプレートをレンダリングする(ともレールがあなたのためにやっているすべての作業を維持する)ための適切な方法があると信じて -

はRuby on Railsで液体を使用するためには、(特に3レール) あなたは#renderを呼び出すとき、「液体」テンプレートを探すためにレールをつなぎ合わせることができるように

液体の宝石自体は、レールのためliquid_viewを提供します。このliquid_viewはレール2.3に完全に動作します しかし、簡単に次のアップデートを行うことで、レール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/コミット/ e27b5fcd174f4b3916a73b9866e44ac0a012b182する

次に、適切に液体ビューをレンダリングするために呼び出すだけ

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

私たちのアプリケーションでは、我々はレンダリングコールのためにさらに追加の液滴をロールアップ#liquid_view_assignsを参照することにより、デフォルトの地元の人々を自動的に含めるように私たちのベースコントローラに「レンダリング」メソッドをオーバーライドしている一般的な液体の属性の一握りを持っているので

def render(...)
  options[:locals] = options.fetch(:locals, {}).merge(liquid_view_assigns)
  super
end
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top