HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <p>Каждая страница любого сайта содержит свое содержимое и общие части - шапку, футер или боковое меню. И если с большим количеством однотипного кода страниц еще можно смириться, то настоящие сложности возникают при попытке изменить шаблоны. Легко случайно забыть внести изменения во все страницы. Чтобы избежать дублирования и потенциальных ошибок при изменениях однотипных страниц существует механизм наследования шаблонов. Мы можем создать базовый шаблон. Он будет содержать все общие элементы сайта и определять блоки, которые могут переопределять дочерние шаблоны.</p>
1 <p>Каждая страница любого сайта содержит свое содержимое и общие части - шапку, футер или боковое меню. И если с большим количеством однотипного кода страниц еще можно смириться, то настоящие сложности возникают при попытке изменить шаблоны. Легко случайно забыть внести изменения во все страницы. Чтобы избежать дублирования и потенциальных ошибок при изменениях однотипных страниц существует механизм наследования шаблонов. Мы можем создать базовый шаблон. Он будет содержать все общие элементы сайта и определять блоки, которые могут переопределять дочерние шаблоны.</p>
2 <p>Создадим новый шаблон<em>layout.html</em>со следующим содержимым:</p>
2 <p>Создадим новый шаблон<em>layout.html</em>со следующим содержимым:</p>
3 <p>Этот шаблон определяет базовую структуру нашего сайта. Важная деталь в нем это конструкция {% block &lt;имя-блока&gt;%} {% endblock %}. Во всех шаблонах-наследниках на место нее подставятся блоки с тем же именем из них.</p>
3 <p>Этот шаблон определяет базовую структуру нашего сайта. Важная деталь в нем это конструкция {% block &lt;имя-блока&gt;%} {% endblock %}. Во всех шаблонах-наследниках на место нее подставятся блоки с тем же именем из них.</p>
4 <p>Добавим новый шаблон-наследник:</p>
4 <p>Добавим новый шаблон-наследник:</p>
5 <p>Инструкция extends сообщает шаблонизатору, что этот шаблон "расширяет" другой шаблон. Теперь, когда шаблонизатор будет обрабатывать наш шаблон<em>index.html</em>, инструкция extends найдет родительский -<em>layout.html</em>. Далее она заменит в нем те блоки, которые мы переопределили в шаблоне<em>index.html</em>.</p>
5 <p>Инструкция extends сообщает шаблонизатору, что этот шаблон "расширяет" другой шаблон. Теперь, когда шаблонизатор будет обрабатывать наш шаблон<em>index.html</em>, инструкция extends найдет родительский -<em>layout.html</em>. Далее она заменит в нем те блоки, которые мы переопределили в шаблоне<em>index.html</em>.</p>
6 <p>Поскольку в шаблоне<em>index.html</em>мы не используем блок sidebar, вместо него будет использоваться значение из родительского шаблона. Содержимое внутри блока в родительском шаблоне всегда используется как значение по умолчанию.</p>
6 <p>Поскольку в шаблоне<em>index.html</em>мы не используем блок sidebar, вместо него будет использоваться значение из родительского шаблона. Содержимое внутри блока в родительском шаблоне всегда используется как значение по умолчанию.</p>
7 <p>В итоге, шаблон-наследник отрендерится так:</p>
7 <p>В итоге, шаблон-наследник отрендерится так:</p>
8 <p>Можно использовать столько уровней наследования, сколько необходимо. Один из распространенных способов использования наследования - трехуровневый подход:</p>
8 <p>Можно использовать столько уровней наследования, сколько необходимо. Один из распространенных способов использования наследования - трехуровневый подход:</p>
9 <ul><li>Создание<em>layout.html</em>шаблона, который содержит основной внешний вид сайта</li>
9 <ul><li>Создание<em>layout.html</em>шаблона, который содержит основной внешний вид сайта</li>
10 <li>Создание<em>layout_SECTIONNAME.html</em>шаблонов для каждого раздела сайта, например,<em>layout_course.html</em>,<em>layout_category.html</em>. Эти шаблоны расширяют<em>layout.html</em>и включают в себя стили для конкретных разделов</li>
10 <li>Создание<em>layout_SECTIONNAME.html</em>шаблонов для каждого раздела сайта, например,<em>layout_course.html</em>,<em>layout_category.html</em>. Эти шаблоны расширяют<em>layout.html</em>и включают в себя стили для конкретных разделов</li>
11 <li>Создание отдельного шаблона для каждого типа страницы, например, курса или статьи. Эти шаблоны расширяют соответствующий шаблон раздела</li>
11 <li>Создание отдельного шаблона для каждого типа страницы, например, курса или статьи. Эти шаблоны расширяют соответствующий шаблон раздела</li>
12 </ul><p>Такой подход максимизирует повторное использование кода и помогает добавлять элементы в области общего содержимого, например, навигацию по всему разделу. Также любые измения в родительских шаблонах отразятся и на наследниках. Так мы можем быть уверены, что поправив заголовок в базовом шаблоне, поправим его и на всех других страницах.</p>
12 </ul><p>Такой подход максимизирует повторное использование кода и помогает добавлять элементы в области общего содержимого, например, навигацию по всему разделу. Также любые измения в родительских шаблонах отразятся и на наследниках. Так мы можем быть уверены, что поправив заголовок в базовом шаблоне, поправим его и на всех других страницах.</p>