Spec-Zone.ru › Pug

Интерполяция

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: &lt;span&gt;escape!&lt;/span&gt;</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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API