У меня есть структура, где обычно существует страница, направляющаяся в (% block heading %}
в моем основном шаблоне:
base.html
<h2>{% block heading %}{% endblock %}</h2>
Большую часть времени я передам в заголовке как это через шаблоны, которые расширяют основу:
extends-base.html
{% block heading %}Super Cool Page!{% endblock %}
Однако для специальной страницы, я не хочу иметь заголовок страницы:
extends-base-special.html
{% block heading %}{% endblock %}
Идеально, это должно исключить <h2>
теги. Теперь, я мог просто заставить все расширяющиеся шаблоны включать <h2>
теги, но это нарушает DRY, поскольку каждая страница должна иметь тот же элемент для заголовка уровня страницы. То, что я предпочел бы делать, является этим (который, кажется, не работает):
base-prefered.html
{% if heading %}
<h2>{% block heading %}{% endblock %}</h2>
{% endif %}
Действительно ли это выполнимо так или иначе на шаблонном уровне, или я должен жадно есть представления для этого?
Вы можете дважды упаковать его
{% block noheader %}
<h2>{% block header %}Super Cool Page!{% endblock header %}</h2>
{% endblock noheader %}
на страницах без заголовка
{% block noheader %}{% endblock %}
Делаем так:
{% заголовок блока %}{% endblock %}
{% заголовок блока %}{% endblock %}
А затем либо расширяем первый, либо второй шаблон. Я считаю, что это должен быть самый простой способ.
И кстати. Записывая:
{% if heading %}
вы на самом деле запрашиваете булевое значение элемента в контексте с именем 'заголовок'. Элементы языка разметки django не удерживаются в контексте, поэтому вы не можете их запрашивать. Вы можете написать тэг, который добавляет что-то в контекст, мне однажды такая вещь была нужна и я использовал ее, но я не верю, что здесь можно так поступить. Вышеприведенное решение должно работать (у меня нет машины, чтобы проверить это) и это лучший способ IMNSHO.