3

我得到了一些降价格式的文本,我想将它返回到我的模板中,以便它可以显示为 html。为此,我定义了一个 Handlebars 助手:

Handlebars.registerHelper('markdown_highlight', function (options) {
  var converter = new Showdown.converter();
  var res = '';
  var html =converter.makeHtml(options.fn(this));
  var high = hljs.highlightAuto(html).value;
  res += high;
  return res;
});

结果是格式化的,但它直接显示为 html:

pre><code> class Foo(object): def __init__(self, i, j): self.i, self.j = i, j def __str__(self): return “(%d, %d)” % (self.i, self.j) def __setitem__(self, idx, v): if idx == 0: self.i = v elif idx == 1: self.j = v else: raise RuntimeError(“Index out of bounds [0,1]”) </code></pre> <p>Make a subclass of Foo, named Bar, that implements the special methods <strong>eq</strong> and <strong>repr</strong>, such that the following code works: </p> <pre><code>&amp;gt;&amp;gt;&amp;gt; f = Bar(1,2)age 3 &amp;gt;&amp;gt;&amp;gt; g = Bar(2,2) &amp;gt;&amp;gt;&amp;gt; f == g False &amp;gt;&amp;gt;&amp;gt; g == eval(repr(g)) True &amp;gt;&amp;gt;&amp;gt; g[0] = 1 &amp;gt;&amp;gt;&amp;gt; f == g True </code></pre>

辅助函数中发生的事情并不那么重要,但有人可能会帮助解释我如何确保返回的 html 显示为 html。

4

3 回答 3

3

你是说html被转义了吗?

如果是这样,请在您的模板中使用{{{&}}}而不是{{& 。}}例如。

{{{markdown_highlight markdown_snippet}}}`

https://stackoverflow.com/a/7173159/236564

于 2012-11-21T21:39:17.207 回答
1

代替

return res;

尝试:

return new Handlebars.SafeString(res);
于 2012-11-22T16:11:26.523 回答
1
Template['timeline-item'].rendered = ->
d = @find 'code'
if d
    hljs.highlightBlock d

我使用这些代码,这可以使 hljs 工作。

在您的模板中,在 {{{content}}} 中扭曲您的模板上下文。

于 2012-11-23T02:36:52.747 回答