Как импортировать родительский шаблон за исключением его переопределенного содержимого в шаблонах django?

Я пытаюсь расширить два вложенных блока из родительского шаблона в дочернем шаблоне.

Это происходит следующим образом:

parent.html

{% block parentBlock %}
    <span> Foo </span>
    {% block rowBlock %}
        <button ...> Button here </button>
        <button ...> Another button here </button>
    {% endblock rowBlock %}
    
    <div> Some other content </div>
{% endblock parentBlock %}

child.html

{% extends 'parent.html' %}

{% block parentBlock %}
    {{ block.super }} # --> See note n°1 below
    {% block rowBlock %}
        {{ block.super }}
        <button ...> A third button that extends the 2 others </button>
    {% endblock rowBlock %}

    <div> Content that extends parentBlock from parent.html </div>
{% endblock parentBlock %}

Примечание n° 1: Проблема в том, что дочерний block.super на parentBlock, помеченный как Примечание 1, сделает super, который включает новый rowBlock и добавляет к нему еще один.

Результат выглядит следующим образом :

<span> Foo </span>
<button ...> Button here </button>
<button ...> Another button here </button>
<button ...> A third button that extends the 2 others </button>
<button ...> Button here </button>
<button ...> Another button here </button>
<button ...> A third button that extends the 2 others </button>
<div> Some other content </div>
<div> Content that extends parentBlock from parent.html </div>

Оказывается, пока я писал свой вопрос, я протестировал новый макет для child.html, который решил проблему :

child.html

{% extends 'parent.html' %}

{% block rowBlock %}
    {{ block.super }}
    <button ...> A third button that extends the 2 others </button>
{% endblock rowBlock %}

{% block parentBlock %}
    {{ block.super }}
    # Pulled the nested block outside of parent, it is computed in block.super

    <div> Content that extends parentBlock from parent.html </div>
{% endblock parentBlock %}

Таким образом, извлечение дочернего элемента из родительского позволяет родительскому вычислить дочерний и отобразить его, но это не влияет на порядок появления элементов.

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