如何在Mustache模板中使用字面量{{}}?

23

如何在Mustache模板中使用文字“{{”?

另外,如果我正在使用自定义标签,例如<%%>,是否有方法编写"<%"?

从理论上讲,我可以使用不同的标签,但我已经编写了太多使用{{}}的代码,无法将它们全部更改。

5个回答

52

暂时更改分隔符:

{{=<% %>=}}
{{Look at the curlies!}}
<%={{ }}=%>

3
假设你正在输出HTML,你可以使用HTML实体来避免它(mustache没有内置任何转义开标签的方法)。
因此,要输出{{,你应该写成&#123;{。 要输出<%,你应该写成&lt;%

@MindVirus 就像我之前说的,Mustache 没有内置转义开标签的方法。不过还是有一些变通方法的。比如改变你的分隔符号,输出该符号,之后再把分隔符改回来。根据你要输出的内容,可能会有更好的变通方式,就像处理 HTML 时一样。 - Paul
1
&#125; 表示 } - mems

3

您可以很容易地单独使用{{。如果您想记录像{{example}}这样的内容,您可以始终使用数据传递前两个花括号。

orphaned curlies are easy {{ <br>
{{curly}}example}} curlies are harder

一些简单的渲染:

var data = { 'curly' : '{{'},
    tpl = $('#curly').html(),
    html = Mustache.to_html(tpl, data);

document.write(html);​

导致结果:

orphaned curlies are easy {{ 
{{example}} curlies are harder

这是完整的可工作的jsFiddle:链接


有没有一种方法可以不传递变量来完成它? - dbkaplun
你不能告诉解析器有时要遵守一种模式,而有时不必遵守,因此需要使用变量和HTML实体的解决方法。 - maxbeatty

0
你可以通过在模板中添加一对花括号来实现结果,例如:数据:const data = {"charsToBeEscaped": "<%"} 模板:a special char like that is perfectly rendered! {{{charsToBeEscaped}}},它会生成:is perfectly rendered! <%

0
你还可以使用一个section lambda。
在mustache.js中:
import Mustache from 'mustache';

const template = '{{ # literal }}{{Look at the curlies!}}{{ / literal }}';

const view = {
    literal: () => text => text
};

const output = Mustache.render(template, view);

console.log(output); // {{Look at the curlies!}}

当然,这样做意味着无法渲染literal部分中的任何内容,这可能是你使用场景中期望的,也可能不是。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接