在Phoenix中使用不同布局模板的正确方法

paa*_*hpa 8 elixir phoenix-framework

更改模板布局以put_layout在每个Controller操作中使用该方法的正确/最简单的方法是什么?想要为不同控制器设置不同布局的一个简单示例似乎变得非常重复(下面),所以感觉我在框架内缺少某些东西.

defmodule MyPhoenix.AController do 
    use MyPhoenix.Web, :controller

    def pageOne(conn, _params) do
        conn
        |> put_layout("LayoutA.html")
        |> render "page1.html" 
    end

    def pageTwo(conn, _params) do 
        conn
        |> put_layout("LayoutA.html")
        |> render "page2.html" 
    end
end

defmodule MyPhoenix.BController do 
    use MyPhoenix.Web, :controller

    def pageOne(conn, _params) do
        conn
        |> put_layout("LayoutB.html")
        |> render "page1.html" 
    end

    def pageTwo(conn, _params) do 
        conn
        |> put_layout("LayoutB.html")
        |> render "page2.html" 
    end
end
Run Code Online (Sandbox Code Playgroud)

Don*_*aio 19

我认为通过设置默认布局可能是最好的.

defmodule MyPhoenix.AController do 
    use MyPhoenix.Web, :controller

    plug :put_layout, "LayoutA.html"

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

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

defmodule MyPhoenix.BController do 
    use MyPhoenix.Web, :controller

    plug :put_layout, "LayoutB.html"

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

    def pageTwo(conn, _params) do 
        render conn, "page2.html"
    end
end
Run Code Online (Sandbox Code Playgroud)


Uģi*_*ols 12

例如,如果您需要一个不同的布局来说明路由器中的单独管理管道所涵盖的所有管理控制器,您可以plug :put_layout, {MyApp.LayoutView, :admin}为管道管道指定.我是从http://www.cultivatehq.com/posts/how-to-set-different-layouts-in-phoenix/了解到的.