Да, это важно. Прежде всего extends
может встречаться только в самой первой строке файла. Во-вторых, include
помещает и помещает объект контекста в стек разрешения, что означает, что значение, созданное в контексте во время включения, выйдет из области видимости при возврате.
Мое правило: создавать base.html
файлы шаблонов, которые определяют общую структуру вашего сайта и использовать либеральные суммы {% block foo %}
в критических областях. Затем все ваши другие шаблоны extends
база (или что-то, что само расширяет базу), и вы заменяете эти блоки по мере необходимости.
include
, с другой стороны, подходит для инкапсуляции вещей, которые вам может понадобиться использовать более чем в одном месте, возможно, даже на одной странице.
Обновление:
Я использовал свою собственную библиотеку template_tags
так долго, что забыл, что в языке шаблонов Django все еще есть большие пробелы в функциональности. Данный тег взят из раннего фрагмента django под названием expr
, который я сильно отредактировал и расширил. Вы можете сказать, например, {% expr 'Fred' as name %}
(или любое допустимое выражение Python), и результат будет сохранен в слоте 'name' в текущем контексте . Если это происходит в шаблоне included
, значение name
будет отображаться при выходе из файла шаблона.
Этого можно добиться с помощью тега {% with %}
, но expr
дает мне гораздо большую гибкость, включая выполнение произвольно сложных вызовов. Первоначально это возникло, когда нужно было создавать сложные кэшированные объекты, которые требовали дорогостоящих взаимодействий с СУБД, которые не могли быть выполнены в представлении, их нужно было вызывать в самом шаблоне.
Напишите мне (в моем профиле), если вам нужно углубиться в это.