【问题标题】:node.js and Handlebars: HTML compiled is escapednode.js 和 Handlebars:编译的 HTML 被转义
【发布时间】:2013-04-04 09:46:05
【问题描述】:

我在节点应用程序中使用把手,我遇到了麻烦。

这是模板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);

问题是标签&amp;lt;B&amp;gt;被转义为&amp;lt;B&amp;gt;

我怎样才能避免这种情况?

【问题讨论】:

    标签: node.js handlebars.js template-engine html-escape-characters


    【解决方案1】:

    来自handlebarsjs.com

    Handlebars HTML 转义 {{expression}} 返回的值。如果你 不希望 Handlebars 转义值,请使用“triple-stash”。

    <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})
    

    【讨论】:

    • 谢谢。效果很好。这只是一个测试用例。这不是我想要做的事情的目的;)
    • 只是说may,因为有时你可能没有选择,但当你这样做时......
    • 我只是在另一个模板中加载一个模板。我使用 2 个 HTML 文件。
    【解决方案2】:

    您希望在模板中使用“三重存储”:

    {{{CONTENT}}}
    

    【讨论】:

    • 感谢您的“回答”:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-12
    • 1970-01-01
    相关资源
    最近更新 更多