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

Вернуться на верх