Передача значения из одного шаблона 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
: последнее не является расширяемым и, таким образом, ограничивает последующие модификации.