Подтвердить что ты не робот

Вызов блока внутри условия if: шаблон django

Я пытаюсь вызвать блок внутри условия if в шаблоне django.

У меня есть base template. У меня есть много других шаблонов, которые расширяют базовый шаблон. Я определил блок в базовом шаблоне:

{% block test_block %}Test{% endblock %}

Затем я хочу переопределить этот блок при определенном условии в других шаблонах. Если условие не выполняется, блок не должен переопределяться. Это то, что я написал:

{% if test_value %}{% block test_block %}Development{% endblock %}{% endif %}

Это фактически (или может быть практически) игнорирует условие if.

Что я наконец сделал:

{% block test_block %}{% if test_value %}Development{% else %}{{ block.super }}{% endif %}{% endblock %}

Мне нужно было сделать что-то подобное во всем, что требовалось.

Это лучший способ? Это единственный способ? Почему я не могу попробовать первый способ? Или есть какая-то ошибка с моей стороны?

4b9b3361

Ответ 1

Вы не ошиблись - блоки шаблонов включены независимо от каких-либо условий вокруг них. Вы можете увидеть это из этой строки класса ExtendsNode в django/template/loader_tags.py в исходном коде Django:

self.blocks = {n.name: n for n in nodelist.get_nodes_by_type(BlockNode)]}

Когда рендерится {% extends %}, он извлекает все узлы блока из шаблона напрямую и сохраняет их для рендеринга, когда родительский объект сталкивается с этими block. Были ли эти блоки у ребенка внутри условных или нет, не рассматривается.