Передача значения из одного шаблона Django в другой
Я хочу построить иерархию шаблонов Django следующим образом:
root.html
|_ root-dashboard.html
|_ root-regular.html
root.html должно быть указано if:
{% if style == "dashboard" %}
{# render some elements in a certain way #}
{% else %}
{# render those elements in a different way #}
{% endif %}
И root-dashboard.html и root-regular.html должны по отдельности расширять root.html, установив style:
# root-dashboard.html
{% extend 'root.html' with style='dashboard'%}
# root-regular.html
{% extend 'root.html' with style='regular'%}
(with приведенный выше синтаксис на самом деле не является допустимым, это просто что-то похожее, что я хочу)
И в представлении может использоваться либо root-dashboard.html, либо root-regular.html для отображения содержимого в том или ином стиле.
Как мне добиться этого без необходимости задания в представлении контекста style?
Определите вместо этого тег шаблона {% block … %} [Django-doc].
В root.html вы используете не if, а:
{% block render_item %}
{# render those elements in a different way #}
{% endblock %}
затем в вашем root-dashboard.html вы используете:
# root-dashboard.html
{% extend 'root.html' %}
{% block render_item %}
{# render some elements in a certain way #}
{% endblock %}
Идея аналогична концепции динамической привязки [wiki] в объектно-ориентированном программировании, и обычно это лучше, чем использование условий if: последнее не является расширяемым и, таким образом, ограничивает последующие модификации.