Node.js и Handlebars: скомпилированный HTML экранирован

Я использую ручки в приложении node, и у меня есть проблемы.

Это шаблон index.html

{{CONTENT}}

Это код

var fs = require("fs");
var handlebars = require("handlebars");

var data = {
    CONTENT: "<b>Hello world!</b>"
};

var templateFile = fs.readFileSync('./index.html', 'utf8');
var template = handlebars.compile( templateFile );
var html = template(data);

Проблема заключается в том, что теги <B> экранируются до &lt;B&gt;

Как я могу избежать этого?

Ответ 1

От handlebarsjs.com:

Handlebars HTML-escapes значения, возвращаемые {{expression}}. если ты не нужно, чтобы ручные панели избегали значения, используйте "тройной штамп".

<div class="entry">
  <h1>{{title}}</h1>
  <div class="body">
    {{{body}}}
  </div>
</div>

с этим контекстом:

{
  title: "All about <p> Tags",
  body: "<p>This is a post about &lt;p&gt; tags</p>"
}

приводит к:

<div class="entry">
  <h1>All About &lt;p&gt; Tags</h1>
  <div class="body">
    <p>This is a post about &lt;p&gt; tags</p>
  </div>
</div>

Однако, с моей точки зрения, это может победить цель разделения шаблона, чем файл js.

Если вы используете precompile, используйте опцию noEscape:

handlebars.precompile(content, {noEscape: true})

Ответ 2

Вы хотите использовать "тройной тайник" в шаблоне:

{{{CONTENT}}}