Есть ли способ сделать блок необязательным в шаблоне Django

В системе шаблонов Django, если у меня есть блок, который я хочу сделать опционально с помощью оператора if, как мне это сделать?

Я пытался это:

{% if val %}{% block title %}Archive {{ foo }}{% endblock %}{% endif %}

Но это не работает. Есть ли способ сделать это, чтобы при заданном значении (в данном случае Null) блок не выдавался, а базовый шаблон использовал исходные значения?

Редактировать: Позвольте мне быть более конкретным, чтобы легче было ответить.

У меня есть страница с 10 записями на страницу. Затем пользователь может перейти к следующей странице и просмотреть следующие десять пунктов. Для каждой последующей страницы, которая идет дальше первой, я хотел бы, чтобы тег заголовка говорил что-то вроде «Архив 1» или «Архив 10», но если они вернутся на исходную страницу, это больше не архив, и он должен просто перейдите к исходному названию сайта, уже указанному в базовых шаблонах.

15
задан Mohammed Shareef C 10 November 2016 в 05:21
поделиться

2 ответа

Насколько я понимаю, блоки - это заполнители, которые нужно «переопределить» в дочерних шаблонах. Они должны быть определены «во время компиляции», а не «во время выполнения».

Что касается вашей конкретной проблемы, почему бы не изменить заголовок на основе номера страницы (при условии, что вы используете разбиение на страницы)? Примерно так:

{% block title %}
    {% ifequal page 1 %}Current{% else %}Archive {{ page }}{% endifequal %}
{% endblock %}
9
ответ дан 1 December 2019 в 01:52
поделиться

У меня возникла аналогичная проблема с проектом, над которым я работаю. Вот как я решил это, используя {{block.super}} для извлечения значения по умолчанию из родительского блока:

Мой родительский шаблон содержит:

{% block title %}Default Title{% endblock %}

Мой дочерний шаблон содержит:

{% block title %}
    {% if new_title %}{{ new_title }}{% else %}{{ block.super }}{% endif %}
{% endblock %}

* Примечание: вы можете захотеть обернуть код в {% spaceless%} {% endpaceless%}, если вы планируете использовать результат в теге заголовка HTML.

(Похоже, что Джордан Рейтер опубликовал то же решение в комментариях к исходному вопросу незадолго до моего ответа.)

23
ответ дан 1 December 2019 в 01:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: