HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <p>Pug позволяет использовать JavaScript для придания логики шаблону. В курсе по SASS мы рассматривали множество вариантов создания дополнительной логики: переменные, функции, циклы, условные конструкции. JavaScript внутри Pug позволяет делать всё то же самое, но немного с другим синтаксисом и особенностями. Это очень важная часть работы с шаблонизатором, которая позволяет раскрыть его на все сто процентов.</p>
1 <p>Pug позволяет использовать JavaScript для придания логики шаблону. В курсе по SASS мы рассматривали множество вариантов создания дополнительной логики: переменные, функции, циклы, условные конструкции. JavaScript внутри Pug позволяет делать всё то же самое, но немного с другим синтаксисом и особенностями. Это очень важная часть работы с шаблонизатором, которая позволяет раскрыть его на все сто процентов.</p>
2 <p>Если вы совсем не знакомы с тем, как работает и выглядит JavaScript, то можете пройти вводный курс<a>Введение в программирование</a>. В нём вы узнаете об основных конструкциях языка.</p>
2 <p>Если вы совсем не знакомы с тем, как работает и выглядит JavaScript, то можете пройти вводный курс<a>Введение в программирование</a>. В нём вы узнаете об основных конструкциях языка.</p>
3 <p>Весь JavaScript код внутри препроцессора можно разделить на три основные группы:</p>
3 <p>Весь JavaScript код внутри препроцессора можно разделить на три основные группы:</p>
4 <ol><li>Буферизованный код</li>
4 <ol><li>Буферизованный код</li>
5 <li>Неэкранированный буферизованный код</li>
5 <li>Неэкранированный буферизованный код</li>
6 <li>Небуферизованный код</li>
6 <li>Небуферизованный код</li>
7 </ol><p>За этими страшными словами стоят простые концепции. Разберём каждую из них в отдельности.</p>
7 </ol><p>За этими страшными словами стоят простые концепции. Разберём каждую из них в отдельности.</p>
8 <h2>Небуферизованный код</h2>
8 <h2>Небуферизованный код</h2>
9 <p>Отличительная особенность небуферизованного кода - отсутствие вывода в конечном HTML. Любой код, который написан в таком стиле не добавит в итоговый код ни единой строчки кода - он нужен для создания дополнительной логики внутри препроцессора. Это могут быть переменные, массивы, циклы и так далее. Для создания небуферизованного кода используется символ - после которого добавляется JavaScript код.</p>
9 <p>Отличительная особенность небуферизованного кода - отсутствие вывода в конечном HTML. Любой код, который написан в таком стиле не добавит в итоговый код ни единой строчки кода - он нужен для создания дополнительной логики внутри препроцессора. Это могут быть переменные, массивы, циклы и так далее. Для создания небуферизованного кода используется символ - после которого добавляется JavaScript код.</p>
10 <p>Создадим переменную с текстом и добавим её в параграф:</p>
10 <p>Создадим переменную с текстом и добавим её в параграф:</p>
11 <h3>Интерполяция переменных и выражений</h3>
11 <h3>Интерполяция переменных и выражений</h3>
12 <p>Для вывода значения переменной в прошлом примере использовалась конструкция h1 #{title}. Это важная часть синтаксиса Pug. Конструкция #{} выводит содержимое переменной или значение выражения в виде строки.</p>
12 <p>Для вывода значения переменной в прошлом примере использовалась конструкция h1 #{title}. Это важная часть синтаксиса Pug. Конструкция #{} выводит содержимое переменной или значение выражения в виде строки.</p>
13 <p>Особенность интерполяции - экранирование HTML-тегов. Вместо них используются специальные символы-мнемоники. Это сделано в целях безопасности - при выводе тегов "как есть" высока вероятность подстановки нежелательных тегов.</p>
13 <p>Особенность интерполяции - экранирование HTML-тегов. Вместо них используются специальные символы-мнемоники. Это сделано в целях безопасности - при выводе тегов "как есть" высока вероятность подстановки нежелательных тегов.</p>
14 <p>Pug предоставляет возможность изменить это поведение и выводить неэкранированные символы. Для этого используется конструкция !{}, но будьте аккуратны - использование такого кода является потенциальной проблемой, особенно при получении данных от пользователя.</p>
14 <p>Pug предоставляет возможность изменить это поведение и выводить неэкранированные символы. Для этого используется конструкция !{}, но будьте аккуратны - использование такого кода является потенциальной проблемой, особенно при получении данных от пользователя.</p>
15 <h2>Буферизованный код</h2>
15 <h2>Буферизованный код</h2>
16 <p>Если небуферизованный код не взаимодействует напрямую с вёрсткой, то задача буферизованного кода - обработать JavaScript и подставить результат в вёрстку. Не бойтесь - на практике понять разницу намного проще. Буферизованный код начинается с символа =.</p>
16 <p>Если небуферизованный код не взаимодействует напрямую с вёрсткой, то задача буферизованного кода - обработать JavaScript и подставить результат в вёрстку. Не бойтесь - на практике понять разницу намного проще. Буферизованный код начинается с символа =.</p>
17 <p>Как и в случае с интерполяцией, Pug экранирует весь HTML при использовании буферизованного вывода для обеспечения безопасности.</p>
17 <p>Как и в случае с интерполяцией, Pug экранирует весь HTML при использовании буферизованного вывода для обеспечения безопасности.</p>
18 <p>Для отмены такого эффекта используется неэкранированный буферизованный код. Как и в случае с интерполяцией, для этого достаточно подставить символ !. Хоть это действие и возможно, но не лишним будет ещё раз напомнить: использование неэкранированного вывода является плохой практикой, так как создает потенциальные проблемы с безопасностью.</p>
18 <p>Для отмены такого эффекта используется неэкранированный буферизованный код. Как и в случае с интерполяцией, для этого достаточно подставить символ !. Хоть это действие и возможно, но не лишним будет ещё раз напомнить: использование неэкранированного вывода является плохой практикой, так как создает потенциальные проблемы с безопасностью.</p>
19 <p>На первый взгляд нет существенной разницы между буферизованным и небуферизованным кодом. С одной стороны да, и тот и другой способ позволяют добавить JavaScript логику в существующий код, но можно определить ключевое отличие - буферизованный код должен вначале получить результат, а только потом он будет выведен. Небуферизованный код может быть исполнен в любое удобное время или не быть исполнен вовсе.</p>
19 <p>На первый взгляд нет существенной разницы между буферизованным и небуферизованным кодом. С одной стороны да, и тот и другой способ позволяют добавить JavaScript логику в существующий код, но можно определить ключевое отличие - буферизованный код должен вначале получить результат, а только потом он будет выведен. Небуферизованный код может быть исполнен в любое удобное время или не быть исполнен вовсе.</p>
20 <ul><li>Небуферизованный код удобно использовать при создании функций, массивов, объектов.</li>
20 <ul><li>Небуферизованный код удобно использовать при создании функций, массивов, объектов.</li>
21 <li>Буферизованный код чаще всего используется при создании однострочных функций или строк, которые состоят только из JavaScript кода</li>
21 <li>Буферизованный код чаще всего используется при создании однострочных функций или строк, которые состоят только из JavaScript кода</li>
22 </ul><h2>Дополнительное задание</h2>
22 </ul><h2>Дополнительное задание</h2>
23 <p>Используя знания из курса<a>Введение в программирование</a>создайте переменную со счётчиком и, с помощью цикла, увеличивайте его на два. Результаты запишите в виде списка. Количество итераций выберите самостоятельно. Определите, где будет буферизованный и небуферизованный код.</p>
23 <p>Используя знания из курса<a>Введение в программирование</a>создайте переменную со счётчиком и, с помощью цикла, увеличивайте его на два. Результаты запишите в виде списка. Количество итераций выберите самостоятельно. Определите, где будет буферизованный и небуферизованный код.</p>
24 <p>Примерный результат:</p>
24 <p>Примерный результат:</p>
25  
25