2016-08-31 7 views
0

私はこれを持っている:"render_existing" - "shared/sub_template1.html"の "view"からhtmlを返すには?私の基本レイアウトで

私は特定のページにのみレンダリングしたい
<%= render_existing(@view_module, "sub_template1." <> @view_template, assigns) %> 

。私はその目的のために "shared/sub_template1.html.eex"サブテンプレートを持っていて、それを "articles/index"でレンダリングしたいと思います。代わりにMyApp.ArticleView /レンダリングから手動でHTMLを返すの「共有/ sub_template1.html」からのhtml - 読んで返す -

defmodule MyApp.ArticleView do 
    #.... 

    def render("sub_template1.index.html", _assigns) do 
# var1 = "something" 
# var2 = "something2" 
# render("shared/sub_template1.html", var1: "var1", var2: "var2") #doesn't work! exception! 


# this works -- rendering html manually 
# but I don't want this 
raw """ 
<div class="class1"> 
    <div class="class2"> 
    #{var1} #{var2} 
    <!-- ............... --> 

""" 

私はレンダリングする:したがって、私はこれを持っています。どうやってやるの?

+0

あなたは 'MyApp.SharedView'を定義しましたか?空の 'SharedView'を定義し、' render(MyApp.SharedView、 "sub_template1.html"、var1: "var1"、var2: "var2") 'を使ってみてください。 – Dogbert

+0

@Dogbert 'render(MyApp.SharedView、" sub_template1.html "、var1:" var1 "、var2:" var2 ")' ---->どこで? – Johshi

答えて

1

/のパスを渡すだけで別のフォルダからテンプレートをレンダリングすることはできません。 web/templates/shared/sub_template1.html.eex(注:ファイルが.htmlで終わる場合、あなたは.html.eexにそれを変更することもあります)をレンダリングするために:、ArticleViewで、その後

# web/views/shared_view.ex 
defmodule MyApp.SharedView do 
    use MyApp.Web, :view 
end 

、あなたはMyApp.SharedViewという名前のビューを作成する必要がありますこれを追加してください:

def render("sub_template1.index.html", _assigns) do 
    var1 = "something" 
    var2 = "something2" 
    render(MyApp.SharedView, "sub_template1.html", var1: var1, var2: var2) 
end 
+0

application.html.eex - "sub_nav1"、 "sub2"、 "sub3"に複数の "render_existing"があった場合、どのようにそれらをすべてArticleViewでレンダリングするのでしょうか? – Johshi

+0

application.html.eex - "sub_nav1"、 "sub2"、 "sub3"に複数の "render_existing"があった場合、どのようにすべて私のArticleViewでレンダリングしますか? – Johshi

+0

'def render(" sub_nav1.index.html "、_assigns)do'、' def render( "sub2.index.html"、_assigns)do'などを作成できますか? – Dogbert

関連する問題