在调用渲染时,可以通过在assigns 中传递layout 键来嵌套布局:
<%= render @view_module, @view_template, Map.put(assigns, :layout, {MyApp.LayoutView, "nested.html"}) %>
这是Phoenix.View.render/3 文档中的相关部分
分配
分配是指将被
在模板中可用。但是,在分配下有一些键
由凤凰专门处理,分别是:
-
:layout - 告诉 Phoenix 将渲染结果包装在
给定的布局。请参阅下一节。
以下assigns是保留的,不能直接设置:
-
@view_module - 正在渲染的视图模块
-
@view_template - 正在呈现@view_module 的模板## 布局模板可以使用:layout 选项在其他模板中呈现。 :layout 接受以下形式的元组
{LayoutModule, "template.extension"}。
渲染模板
在布局中,只需使用 @view_module 调用 render/3
和@view_template 分配:
<%= render @view_module, @view_template, assigns %>
对于 3 种布局,您可以执行以下操作:
# Controller
render(conn, "index.html", nested_1: "nested_1.html", nested_2: "nested_2.html")
# app.html.eex
<%= render @view_module, @view_template, Map.put(assigns, :layout, {MyApp.LayoutView, assigns.nested_1}) %>
# nested_1.html.eex
<%= render @view_module, @view_template, Map.put(assigns, :layout, {MyApp.LayoutView, assigns.nested_2}) %>
# nested_2.html.eex
<%= render @view_module, @view_template, assigns %>