Шаблон Django: почему блок во включенном шаблоне не может быть перезаписан дочерним шаблоном? - PullRequest
11 голосов
/ 21 октября 2010

Чтобы проиллюстрировать мой вопрос более наглядно, давайте предположим, что у меня есть шаблон include.html с содержимым:

{% block test_block %}This is include{% endblock %}

У меня есть еще один шаблон parent.html с содержимым, подобным этому:

This is parent

{% include "include.html" %}

Теперь я создаю шаблон с именем child.html, который расширяет parent.html:

{% extends "parent.html" %}
{% block test_block %}This is child{% endblock %}

Моя идея заключается в том, что при рендеринге child.html test_block в child.html может перезаписать тот, что входит в include.HTML.Насколько я понимаю, когда шаблон включен, он включен как есть.Так что в моем случае кажется, что parent.html равен:

This is parent

{% block test_block %}This is include{% endblock %}

Так что child.html должен иметь возможность перезаписать test_block.Но похоже, что не может.Зачем?Есть ли обходной путь?

1 Ответ

13 голосов
/ 21 октября 2010

Когда вы включаете шаблон, он отображает шаблон, а затем включает отображаемый контент.

Из документации Django:

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

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

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