2016-09-15 3 views
5

レイアウトなしでレンダリングしたい特定のコントローラアクションがあります。レイアウトなしでコントローラアクションをレンダリングするにはどうすればよいですか?

コントローラーレベルでプラグなしでレンダリングしようとしましたが、機能しませんでした。

defmodule Hello.PageController do 
    use Hello.Web, :controller 

    plug :put_layout, nil 

    def landing(conn, _params) do 
    render conn, "landing.html" 
    end 
end 

どうすればいいですか?

答えて

6

plug :put_layout, nilが動作しない理由は、the put_layout plug only considers false to mean "don't use any layout"です。 nilは、他の原子のように扱われ、フェニックスは、レンダリングしようとしnil.html

/2をレンダリングするか、ウェブ」でテンプレートを定義するためにMyApp.LayoutViewのための「nil.html」をレンダリングすることができませんでした、マッチング句を定義してください。/templates/layout "と入力します。以下のテンプレートがコンパイルされた:

  • app.htmlは修正がfalseを使用することです:

    plug :put_layout, false 
    

    あなたが特定のアクションへのプラグインを制限したい場合は、することができます合格:when

    plug :put_layout, false when action in [:index, :show] 
    
2

put_layoutを呼び出し、connとfalseを渡すだけです。

def landing(conn, _params) do 
    conn = put_layout conn, false 
    render conn, "landing.html" 
end 
関連する問題