类似Jinja的JS模板语言

27

我非常喜欢Django/Jinja2模板语言。它们的语法非常简单,但非常灵活。在JavaScript中是否有类似于这种语法和功能的东西,或者至少具备这种功能呢?

我查看了underscore、jQuery模板和mustache模板,但似乎都不是我想要的。

附加说明

我认为在所有库中(我查看过的),mustache是最好的,但我不太喜欢它的语法。例如这个mustache模板:

{{#people}}
    {{name}}
{{/people}}
{{^people}}
    No people :(
{{/people}}

与 Django 模板相比:

{% for person in people %}
    {{ person.name }}
{% empty %}
     No people :(
{% endfor %}`

同样适用于应用过滤器。例如:

{{#filter}}{{value}}{{/filter}}

对比

{{ value|filter }}

我认为django/jinja2的方法更加干净,自然。

那么,是否有任何js库可以非常类似于django/jinja地处理模板呢?如果没有,我想我必须使用mustache(或者其他一些好的js库-我愿意接受建议),但它感觉不太对。

谢谢。


Mustache缺少哪些功能? - pradeek
2
有一个 JavaScript 版本的 Jinja,但我个人还没有尝试过。 - pradeek
看起来非常不错。唯一不太喜欢的是大小。使用Closure编译器,只能压缩到18kb。我刚刚在谷歌上搜索,发现了https://github.com/adammark/Markup.js和https://github.com/tbranyen/combyne.js。你对它们有什么想法吗? - miki725
8个回答

21

请看一下 Nunjucks,它是一个JS模板引擎,受Jinja2的强烈启发。它支持块继承、宏、过滤器等功能,并且可以在服务器(NodeJS)和客户端(大多数浏览器)上工作。


6
如果还有其他人和我一样晚到这个派对,Nunjucks是在此处唯一仍然在github上活跃的项目。它由Mozilla运行,所以很可能不会很快消失... - mitchell_st
Nunjucks 不再维护。 - felipecrp
1
@felipecrp Nunjucks 绝对仍在维护中。有提交、PR和大量活动 https://github.com/mozilla/nunjucks - KayakinKoder
1
@KayakinKoder 现在已经解决了。:) 但是在留言时,他们正在寻找一个维护者。 https://github.com/mozilla/nunjucks/commit/f44646ba95e564cbe7bbe70ad3fda4359878ed5a#diff-04c6e90faac2675aa89e2176d2eec7d8 - felipecrp

7
我的JavaScript Jinja实现可以在这里找到:https://github.com/sstur/jinja 它支持Jinja和Liquid语法,可以在浏览器和Node上运行,将模板编译为无依赖JavaScript,并且压缩后大约只有3K。
演示可在这里看到:http://sstur.com/jinja/demo/ 测试已包含在内。Express.js支持正在进行中...

4

167.667 kb - 最好启用gzip - Michael Benin

4

编辑:不再维护

Swig是一个非常棒的、类似于Django/Jinja的Node.js和浏览器模板引擎。

<h1>{{ pagename|title }}</h1>
<ul>
{% for author in authors %}
    <li{% if loop.first %} class="first"{% endif %}>{{ author }}</li>
{% endfor %}
</ul>

您可以添加自定义标签以实现各种类型的模板语法:
{% filter %}{{value}}{% endfilter %}
{% filter 'value' %}
{{ value | filter }}

小贴士: 您可以使用Django的request.is_ajax()来有条件地发送未被渲染的Django模板,并使用Swig将其与JSON对象一起呈现。


1
我也同意这个观点,特别是因为它与Express兼容! - DandyDev

2
一个JavaScript模板库,旨在兼容Django的模板语言。 Plate


0

0

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