Phoenix中“ 404”页面的自定义名称

时间:2018-07-03 17:13:33

标签: elixir phoenix-framework

在我的Phoenix应用程序中,我有这个:

defmodule MyAppWeb.ErrorView do

  # ...........

  def render("not_found1234.html", assigns) do
    # ...........

  end

当找不到资源而不是“ 404.html”时,如何告诉Phoenix应该渲染“ not_found1234.html”?

3 个答案:

答案 0 :(得分:1)

我还没有尝试过,但是可以想象在您的ErrorView模块中,您可以简单地执行以下操作:

def render("404.html", assigns) do
  render("not_found1234.html", assigns)
end

然后在lib/yourapp_web/templates/error中创建一个名为not_found1234.html.eex的文件

(如果phoenix会在error目录中预编译文件并创建适当的函数来处理这些名称的逻辑,就像创建404.html.eex一样,这应该可以)

https://hexdocs.pm/phoenix/views.html#the-errorview

(如果它可以正常工作,那并不意味着这是个好主意,这取决于您为什么这么做,还有其他一些方法可以从内部调用模板来进行模板渲染呈现其他模板等的功能,但同样适用)

答案 1 :(得分:0)

我认为您需要这样做,而不是m3个字符的答案:

def render("404.html", assigns) do
   render_template("not_found1234.html", assigns)
end

答案 2 :(得分:-1)

不能。 source

  

Phoenix将在我们的应用程序中检测到任何400或500个状态级别的错误,并在ErrorView中使用render / 2函数来呈现适当的错误模板。我们获得了针对404和500个HTML错误的默认实现,但是我们可以向render / 2添加任何可能需要的子句。与template / 2的现有子句不匹配的任何错误都将被template_not_found / 2捕获。

您需要自定义MyApp.ErrorView

通常,有多个未找到的页面不是一个好的模式,您可以做的是扩展404.html视图并向其传递更多信息,例如资源类型,资源ID,请求的url。 ..