В системе шаблонов Django, если у меня есть блок, который я хочу сделать опционально с помощью оператора if, как мне это сделать?
Я пытался это:
{% if val %}{% block title %}Archive {{ foo }}{% endblock %}{% endif %}
Но это не работает. Есть ли способ сделать это, чтобы при заданном значении (в данном случае Null) блок не выдавался, а базовый шаблон использовал исходные значения?
Редактировать: Позвольте мне быть более конкретным, чтобы легче было ответить.
У меня есть страница с 10 записями на страницу. Затем пользователь может перейти к следующей странице и просмотреть следующие десять пунктов. Для каждой последующей страницы, которая идет дальше первой, я хотел бы, чтобы тег заголовка говорил что-то вроде «Архив 1» или «Архив 10», но если они вернутся на исходную страницу, это больше не архив, и он должен просто перейдите к исходному названию сайта, уже указанному в базовых шаблонах.
Насколько я понимаю, блоки
- это заполнители, которые нужно «переопределить» в дочерних шаблонах. Они должны быть определены «во время компиляции», а не «во время выполнения».
Что касается вашей конкретной проблемы, почему бы не изменить заголовок на основе номера страницы (при условии, что вы используете разбиение на страницы)? Примерно так:
{% block title %}
{% ifequal page 1 %}Current{% else %}Archive {{ page }}{% endifequal %}
{% endblock %}
У меня возникла аналогичная проблема с проектом, над которым я работаю. Вот как я решил это, используя {{block.super}} для извлечения значения по умолчанию из родительского блока:
Мой родительский шаблон содержит:
{% block title %}Default Title{% endblock %}
Мой дочерний шаблон содержит:
{% block title %}
{% if new_title %}{{ new_title }}{% else %}{{ block.super }}{% endif %}
{% endblock %}
* Примечание: вы можете захотеть обернуть код в {% spaceless%} {% endpaceless%}, если вы планируете использовать результат в теге заголовка HTML.
(Похоже, что Джордан Рейтер опубликовал то же решение в комментариях к исходному вопросу незадолго до моего ответа.)