我想在没有布局的情况下渲染我的错误视图:
defmodule MyApp.ErrorView do
use MyApp.Web, :view
def render("404.html", assigns) do # renders my_404.html.eex template
render(__MODULE__, "my_404.html")
end
行动:
def my_action(conn) do
if something_wrong do
conn
|> put_status(404)
|> render(MyApp.ErrorView, "404.html")
# conn
# |> put_status(404)
# |> put_layout(false)
# |> put_view(MyApp.ErrorView)
# |> render("404.html")
但它不起作用,它呈现我的主要应用程序模板。当我取消注释我的代码的第二部分并注释掉第一部分时,它将永远挂起并且不会渲染任何内容。
此外,我希望能够在 ErrorView 中设置layout false
,因为我不想从所有的每个操作中调用put_layout(false)
我的控制员。
答案 0 :(得分:0)
我会做的是:
引发已定义的异常并将plug_status
字段设置为404,例如Ecto.NoResultsError
定义您自己的异常模块,它执行相同的
defmodule WhoopsyError do defexception [:message, :plug_status] def exception(_) do %__MODULE__{message: "Whoopsy!", plug_status: 404} end end
凤凰城将接管并为您呈现错误视图而无需模板。