Можете ли вы переопределить частичные шаблоны phoenix с помощью блочных суперов (например, Django?)

#elixir #phoenix-framework #phoenix-live-view

#elixir #phoenix-framework #феникс-просмотр в реальном времени

Вопрос:

Каков рекомендуемый способ дифференцировать HTML-блок в шаблонах phoenix?

Я прочитал документацию; которая рисует следующие контуры;

  • корневой макет вводится подключаемым модулем в маршрутизаторе
  • вы можете дополнительно установить макет на маршруте
  • вы можете дополнительно установить макет для представления

Но возможно ли (или иным образом рекомендуется) каким-либо образом переопределить только блок шаблона? Например, Django позволяет вам делать такие вещи, как;

base_template

 {% block header %}
  <%= render "_header.html", assigns %>
{% endblock %}

{% block content %}
  stuff..
{% endblock %}
 

inheriting_view_template

 {% extends "base_template.html" %}

{% block header %}
  {{ block.super }}
  <p>my super interesting extra header context</p> <-- !
{% endblock %}

{% block content %}
  stuff..
{% endblock %}
 

Комментарии:

1. ответ на elixirforum; elixirforum.com/t /…

Ответ №1:

Итак, это что-то похожее на Rails world

some_layout.erb

 <html>
  <body>
    <header>
      <%= yield :header %>
    </header>
    <div>
      <%= yield :content %>
    </div>
    <footer>
       <%= yield :footer %>
    </footer>
  </body>
<html>
 

И просто для обобщения вашего ответа (для дальнейших читателей). Возможны два метода

render_existing Отображает шаблон, только если он существует.

 <head>
  <%= render_existing view_module(@conn), "scripts.html", assigns %>
</head>
 

render_layout Отображает заданный макет, передавая заданный блок do / end как @inner_content .

 # layout/blog.html.eex
<%= render_layout LayoutView, "app.html", assigns do %>
  <div class="sidebar">...</div>
  <%= @inner_content %>
<% end %>