Как правило, использование include
s не подходит для шаблонов Django. Позвольте мне ответить на ваш вопрос по нескольким направлениям.
Во-первых, позвольте мне обратиться к боковой панели.
Почти все ли общие страницы будут использовать эту боковую панель? Вставьте ее в Base
. Не переопределяйте эти блоки боковой панели (то есть вообще не пишите их в шаблонах Story_*
).
Является ли эта боковая панель уникальной для шаблонов Story_*
? Создайте еще один шаблон, скажем, Story_base
и расширьте его. Это сродни созданию абстрактного суперкласса в Java. (Ответ был у меня в голове, но формулировка была безжалостно сорвана с jpwatts.)
Далее, позвольте мне обратиться к наследованию шаблона. Скажем, у вас есть шаблон с именем Story_list
, который расширяет Base
. На данный момент, после установки {% extends "Base" %}
, Story_list
будет точно Base
. Все, что вы добавляете в Story_list
, игнорируется, потому что шаблон уже завершен. Единственное, что вы можете сделать сейчас, это переопределить блоки, которые были определены в Base
.
Наконец, позвольте мне обратиться к include
с. Старайтесь всегда избегать их. Другие движки шаблонов, такие как PHP, рекомендуют использовать include
s. Однако это может привести к менее управляемым шаблонам в долгосрочной перспективе. Немного сложнее взглянуть на включенный фрагмент и сразу определить его место в иерархии шаблонов. Их также сложнее реорганизовать в иерархию шаблонов, особенно если вы включите их на нескольких уровнях (один раз в Base
, дважды в Story_base
, один раз в некоторые из Story_*
и т. Д.).