JS: Веб-разработка
Теория: Лейауты в Pug
Использование шаблонов значительно упрощает создание HTML-страниц на стороне сервера. Но у этого подхода есть и недостатки. Он порождает определенные неудобства, связанные с повторяющимися блоками. В этом уроке мы поговорим об этой проблеме и выясним, как предотвращать такие ситуации.
Инвертированный подход к повторяющимся блокам
Представьте себе типовой сайт. На большинстве сайтов есть верхнее меню, футер и еще немало повторяющихся блоков. Как с ними правильно работать? Кажется, что копировать все это в каждый шаблон — не самая лучшая идея.
Есть еще один подход — вынести общие куски в отдельные файлы и включить их в нужных шаблонах:
Это простое решение, которые использовалось в самых ранних шаблонизаторах. Разработчики быстро поняли, насколько это неудобно. Проблема заключается в двух аспектах:
- Разработчику приходится делать подобные включения абсолютно в каждом шаблоне вручную. В нашем примере их всего два. А что, если бы их были сотни? На работу с каждым отдельным шаблоном ушло бы очень много времени
- Разработчику приходится вручную проверять разные файлы и искать незакрытые теги, потому что части одних и тех же тегов могут быть разбросаны по разным файлам. Отлаживать такие проекты очень сложно
Эти проблемы решил инвертированный подход, в котором не куски сайта вставляются в шаблон, а шаблон вставляется в макет сайта. Принцип здесь такой:
- В одном месте описываем макет – основу сайта, которая не меняется по структуре
- Шаблонизатор делает так, чтобы шаблон конкретной страницы вставлялся в этот макет
В этом случае шаблон ничего не знает об устройстве макета, а макет хранит все свои части в одном месте.
Инвертированный подход в PUG
Шаблонизатор PUG поддерживает работу с макетами. Посмотрим, как это работает. Для начала создадим макет src/views/layouts/page.pug:
Обратим внимание на content — сюда PUG поместит шаблон конкретной страницы. Посмотрим, как выглядит шаблон списка курсов:
С помощью операции extends подключается макет в нужную страницу. В примере выше мы указали путь к шаблону макета относительно текущего шаблона.
Главная особенность в том, что мы помещаем содержимое шаблона в специальную конструкцию, которая вставляет его в нужное место в макет:
Может показаться, что это избыточно. С другой стороны, создатели шаблонизатора хотели сделать чуть более продвинутую систему, чем подстановку в один блок. Такая конструкция позволяет вставлять в макет сразу несколько блоков и передавать туда данные конкретного шаблона. Посмотрим на пример такого макета и шаблона:
Кроме content, в этом макете используется footer:
Код приложения будет выглядеть так:
Структура файлов шаблонов с макетом выглядит так:
Рекомендуемые программы
Завершено
0 / 23


