Интерполяция
Pug предоставляет операторы для различных потребностей в интерполяции.
Интерполяция строк, экранированная
Рассмотрим размещение локалей в следующем шаблоне: title, author, и theGreat.
- var title = "On Dogs: Man's Best Friend";
- var author = "enlore";
- var theGreat = "<span>escape!</span>";
h1= title
p Written with love by #{author}
p This will be safe: #{theGreat}
<h1>On Dogs: Man's Best Friend</h1> <p>Written with love by enlore</p> <p>This will be safe: <span>escape!</span></p>
title следует базовой схеме оценки локалей шаблона, но код между #{ и } оценивается, экранируется и результат буферизируется в выходные данные рендерируемого шаблона.
Это может быть любое допустимое выражение JavaScript, поэтому вы можете делать всё, что вам нравится.
- var msg = "not my inside voice";
p This is #{msg.toUpperCase()}
<p>This is NOT MY INSIDE VOICE</p>
Pug достаточно умен, чтобы понять, где заканчивается выражение, поэтому вы даже можете включить } без экранирования.
p No escaping for #{'}'}!
<p>No escaping for }!</p>
Если вам нужно включить verbatim #{, вы можете либо экранировать его, либо использовать интерполяцию. (Так мета!)
p Escaping works with \#{interpolation}
p Interpolation works with #{'#{interpolation}'} too!
<p>Escaping works with #{interpolation}</p>
<p>Interpolation works with #{interpolation} too!</p> Интерполяция строк, неэкранированная
Вам не обязательно играть в безопасности. Вы также можете буферизовать неэкранированные значения в свои шаблоны.
- var riskyBusiness = "<em>Some of the girls are wearing my mother's clothing.</em>";
.quote
p Joel: !{riskyBusiness}
<div class="quote"> <p>Joel: <em>Some of the girls are wearing my mother's clothing.</em></p> </div>
Предостережение
Помните, что буферизация неэкранированного содержимого в ваших шаблонах может быть весьма рискованной, если это содержимое получено от пользователей. Никогда не доверяйте вводу пользователя!
Интерполяция тегов
Интерполяция работает не только с JavaScript-значениями, но и с Pug. Просто используйте синтаксис интерполяции тегов, как в следующем примере:
p. This is a very long and boring paragraph that spans multiple lines. Suddenly there is a #[strong strongly worded phrase] that cannot be #[em ignored]. p. And here's an example of an interpolated tag with an attribute: #[q(lang="es") ¡Hola Mundo!]
<p>This is a very long and boring paragraph that spans multiple lines. Suddenly there is a <strong>strongly worded phrase</strong> that cannot be <em>ignored</em>.</p> <p>And here's an example of an interpolated tag with an attribute: <q lang="es">¡Hola Mundo!</q></p>
Вы могли бы добиться того же, написав HTML-тег в строке вашего Pug…но тогда какой смысл писать Pug? Оберните объявление вложенного тега Pug в #[ и ], и он будет оценен и буферизирован в содержимое содержащего тега.
Управление пробелами
Синтаксис интерполяции тегов особенно полезен для вложенных тегов, где пробелы до и после тега имеют значение.
По умолчанию Pug удаляет все пробелы до и после тегов. Посмотрите на следующий пример:
p | If I don't write the paragraph with tag interpolation, tags like strong strong | and em em | might produce unexpected results. p. If I do, whitespace is #[strong respected] and #[em everybody] is happy.
<p>If I don't write the paragraph with tag interpolation, tags like<strong>strong</strong>and<em>em</em>might produce unexpected results.</p> <p>If I do, whitespace is <strong>respected</strong> and <em>everybody</em> is happy.</p>
См. раздел о пробелах на странице Обычный текст для более подробного обсуждения этой темы.
© Pug authors
Licensed under the MIT license.
https://pugjs.org/language/interpolation.html