Как импортировать родительский шаблон за исключением его переопределенного содержимого в шаблонах 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 %}
Таким образом, извлечение дочернего элемента из родительского позволяет родительскому вычислить дочерний и отобразить его, но это не влияет на порядок появления элементов.