9

我正在尝试使用严重依赖 Handlebars 模板系统的 ember.js 库用 javascript 编写应用程序。但是,我使用的 FLASK 也使用了 jinja 模板系统。

是否可以同时使用两个模板渲染器?还是我需要使用一个。任何有使用烧瓶和 ember.js 经验的人都知道哪个更容易被另一个替换?(也许把手更容易替换 Jinja,反之亦然)。

4

4 回答 4

10

请注意,这两个模板引擎位于不同的位置。Jinja2 将运行在服务器端,Handlebars 将运行在客户端。如果需要,您可以在不受干扰的情况下同时使用两者。

但是话虽如此,如果您拥有像 ember.js 这样的富客户端框架,则确实不需要使用服务器端模板。在您的情况下,Flask 服务器可能具有通过 ajax 请求将数据提供回 ember.js 客户端的路由,因此客户端确实是进行模板渲染的最佳场所。

于 2013-06-26T21:57:55.717 回答
6

您可以将代码段标记为{% raw %}告诉 jinja2 忽略它。将您的 handlebars.js 模板包装在原始标签中,如下所示:

{% raw %}
<script id="foo-template" type="text/x-handlebars-template">
    <p>{{foo}} - {{bar}}</p>
</script>
{% endraw %}
于 2017-03-28T09:54:26.317 回答
2

正如@Miguel 所说,如果您使用 ember.js,您实际上并不需要 Jinja2,我想如果您不想渲染这些模板,只需返回 flask.send_file('your html file here') 而不是返回 flask。 render_template('你的 html 文件在这里'). 有关更多详细信息,请参阅文档

于 2013-06-27T14:32:17.307 回答
1

虽然我基本同意@Miguel 和@Ali,但我合作过的几家公司将 API 的 RESTful 模型与服务器生成的 HTML 混合在一起。[注意:使用 Ember 时不应该出现这种情况,但我正在当前客户端的代码库中使用 Flask / Jinja2 和 Backbone。]

根据可汗学院风格指南的一些阅读,我实际上找到了一个使用Pybars的解决方案:

@app.template_filter("handlebars")
def handlebars_filter(context, filepath):
    source = open( filepath, "r").read().decode('utf-8')
    template = pybars.Compiler().compile( source )

    return Markup( u"".join( template( context )))
于 2014-10-28T18:43:14.360 回答