如何在Phoenix布局中定义多个“yield:something”?

时间:2018-04-01 03:52:34

标签: elixir phoenix-framework

我有一个布局:

# main_layout.html.eex
<html>
    <head>

    <............>
    </head>


    <div class="main_content">
      <%= render(@view_module, @view_template, assigns) %>
    </div>

    <footer ......>

还有很多子页面。但是,在一些(!)子页面中,我想在

之外呈现html
    <div class="main_content">
      <%= render(@view_module, @view_template, assigns) %>
    </div>

也就是说,我想追加一些额外的html到"<footer ...>""<div class="main_content">"标记

其余页面应继续以正常方式呈现:没有这些额外的htmls部分。

我该怎么做?

1 个答案:

答案 0 :(得分:2)

可以根据需要渲染尽可能多的模板。

<div class="main_content">
  <%= render(@view_module, @view_template, assigns) %>
</div>

<footer>
  <%= render(@footer_module, @footer_template, assigns) %>
</footer>

条件渲染可以从最顶层的模板完成:

<footer>
  <%= if ... do %>
    <%= render(@footer_module, @footer_template, assigns) %>
  <% end %>
</footer>

或者从FooterModule本身,如果没有必要,则不提供任何内容。

如果您要添加到页脚的信息因孩子而异,请使用Phoenix.View.render_existing/3并且根本不提供不需要的模板:phoenix会默默地忽略此指令用于不存在的模板。