Jinja-like JS模板语言

时间:2012-07-12 23:33:13

标签: javascript jquery jinja2 template-engine language-comparisons

我真的很喜欢django / jinja2模板语言。它们的语法非常简单,而且功能多样。在javascript中是否有类似于语法和功能的内容,或者两者都有,至少在功能方面是这样。

我查看了下划线,jquery模板和小胡子模板,但它们似乎都不是我想要的。

附加说明

我认为在所有的libs(我看过)中,胡子是最好的,但我并不喜欢语法。例如这个胡子模板

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

与django的模板相比:

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

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

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

VS

{{ value|filter }}

我认为django / jinja2方法更干净,感觉更自然。

那么,是否有任何js库的模板与django / jinja非常相似?如果没有,我想我必须忍受muschache(或者其他一些好的js库 - 我愿意接受建议),但它感觉不对。

谢谢。

8 个答案:

答案 0 :(得分:15)

看看Nunjucks,一个受Jinja2启发的JS模板引擎。它支持块继承,宏,过滤器等等,同时适用于服务器(NodeJS)和客户端(大多数浏览器)。

答案 1 :(得分:5)

我的JavaScript Jinja实现可以在这里找到: https://github.com/sstur/jinja

它支持Jinja和Liquid语法,在浏览器和Node中运行,将模板编译为无依赖JavaScript,并且大约是3K gzip压缩

http://sstur.com/jinja/demo/

包括测试。 Express.js支持正在进行中..

答案 2 :(得分:4)

链接@ pradeek的评论。它是jinja到js的一个港口。

https://github.com/ericclemmons/jinja.js

答案 3 :(得分: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对象渲染它。

答案 4 :(得分:2)

  

一个javascript模板库,旨在与django的模板语言兼容

Plate

答案 5 :(得分:1)

twig.js看起来也很有趣,重量也比板块重 https://github.com/justjohn/twig.js

答案 6 :(得分:0)

答案 7 :(得分:0)

我已经将Jinja2与Python结合使用,现在我在Node.js平台上的不同项目中使用jinjs。

https://github.com/ravelsoft/node-jinjs