Пропустить уровень с {{block.super}} - PullRequest
1 голос
/ 14 апреля 2019

У меня есть стороннее приложение, которое определяет несколько шаблонов (что-то вроде того, как работает django-admin). Базовый шаблон определяет блок с некоторым содержанием:

base.html:

<!doctype HTML>

<html><head>
<!-- blah blah -->

{% block very_kewl %}
    <marquee><b><i><u>this is very kewl</marquee></b></i></u>
    <!-- disclaimer: this is not valid HTML! -->
{% endblock very_kewl %}

</html>

Затем дочерний шаблон очищает блок:

actual_page.html:

{% extends 'base.html' %}

{# very many other stuff, part 1 #}

{% block very_kewl %}{% endblock %}

{# very many other stuff, part 2 #}

Чего я хочу добиться, так это сохранить на странице «очень странный» контент.

Подход, который работает, состоит в том, чтобы просто скопировать весь actual_page.html в dir шаблона проекта и пропустить строку {% block very_kewl %}{% endblock %}. Это работает, но недостатком является то, что я также должен повторить все остальные части шаблона, некоторые из которых могут измениться в будущем.

Итак, вопрос в , как я могу показать этот "очень кьюл" контент из базового шаблона, не повторяя при этом все остальные вещи в actual_page.html?

В идеале я мог бы сделать что-то подобное, но, конечно, это не сработает:

project_templates/actual_page.html:

{% extends 'actual_page.html' %}

{% block very_kewl %}{{ block.super.super }}{% endblock %}

1 Ответ

0 голосов
/ 14 апреля 2019

Почему бы не оставить HTML, используемый в блоке базового шаблона, отдельным шаблоном?

project_template/partials/very_kewl.html

<marquee><b><i><u>this is very kewl</marquee></b></i></u>
<!-- disclaimer: this is not valid HTML! -->

Теперь просто включите его везде, где необходимо использовать HTML.

project_template/base.html

<!doctype HTML>

<html><head>
<!-- blah blah -->

{% block very_kewl %}
    {% include 'partials/very_kewl.html' %}
{% endblock very_kewl %}

</html>

А у внука project_templates/actual_page.html

{% extends 'actual_page.html' %}

{% block very_kewl %}{% include 'partials/very_kewl.html' %}{% endblock %}

Таким образом, даже в какой-то момент блок очищается, потомки этого шаблона могут просто включать необходимый HTML.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...