РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
⊗pydjPmLyIh 67 of 187 menu

Расширение шаблонов в Django

На сайте у страниц общий каркас: шапка, подвал, общая разметка HTML документа. Меняется обычно только контент и заголовок title.

Ранее мы собирали страницу из кусков через {% include %}. Есть и другой подход: сделать один базовый макет, а в нем отметить места, которые каждая страница заполнит по-своему.

Такой подход называют наследованием шаблонов (template inheritance).

Давайте разместим общий макет в файле base.html. Пока просто наметим, где будет контент страницы:

<!DOCTYPE html> <html> <head> <title>title</title> </head> <body> <header> header </header> <main> page content here </main> <footer> footer </footer> </body> </html>

Места, которые дочерние шаблоны могут переопределить, задают тегом {% block %}. У каждого блока есть имя.

Давайте сделаем блок title для заголовка страницы и блок content для основного содержимого. Внутри блока можно указать значение по умолчанию - оно используется, если дочерний шаблон блок не переопределил:

<!DOCTYPE html> <html> <head> <title>{% block title %}My Site{% endblock %}</title> </head> <body> <header> header </header> <main> {% block content %}{% endblock %} </main> <footer> footer </footer> </body> </html>

Теперь сделаем страницу about.html. Она не дублирует весь макет, а расширяет базовый шаблон тегом {% extends %} и заполняет нужные блоки.

Тег extends должен быть первой строкой файла:

{% extends 'base.html' %} {% block title %}About{% endblock %} {% block content %} <h1>About page</h1> {% endblock %}

Django возьмет base.html и подставит в блоки то, что записано в дочернем шаблоне. В браузере отобразится:

<!DOCTYPE html> <html> <head> <title>About</title> </head> <body> <header> header </header> <main> <h1>About page</h1> </main> <footer> footer </footer> </body> </html>

Дан базовый шаблон base.html с блоками title и content. Создайте шаблон страницы, который расширяет базовый и переопределяет оба блока.

Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить