액체 템플릿 언어를 사용하여 레이아웃 내에서 템플릿을 어떻게 렌더링 할 수 있습니까?

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

  •  16-09-2019
  •  | 
  •  

문제

액체 레이아웃 (CSS 액체 레이아웃이 아닌 액체 템플릿 Lang) 내에서 액체 템플릿을 렌더링하려고합니다. 레이아웃 부분을 렌더링 할 수없는 것 같습니다. 현재 사용 :

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로 이름을 바꾸고 @layout으로 @_tempalte 및 @_layout으로 이름을 바꾸 었으며 모든 것이 예상대로 작동합니다.

다른 팁

Ruby on Rails (특히 레일 3)에서 액체를 사용하려면 - 나는 액체 템플릿을 렌더링하는 올바른 방법 (그리고 모든 작업 레일이 당신을 위해 수행하는 모든 작업 레일을 유지하는 것)을 다음과 같습니다.

액체 보석 자체는 레일 용 액체 _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/e27b5fcd174f4b3916a73b986e44ac0a012b182

그런 다음 액체 뷰를 올바르게 렌더링하려면 전화를 걸어야합니다

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