Ember.js 您可以使用两个HTML模板,例如Handlebar和Jinja吗

Ember.js 您可以使用两个HTML模板,例如Handlebar和Jinja吗,ember.js,flask,jinja2,handlebars.js,Ember.js,Flask,Jinja2,Handlebars.js,我正在尝试用javascript编写一个应用程序,该应用程序使用的是ember.js库,它严重依赖于Handlebar模板系统。然而,我使用的是FLASK,它也使用了jinja模板系统 是否可以同时使用两个模板渲染器?或者我需要用一个来代替另一个。任何有使用flask和ember.js经验的人都知道哪一个可能更容易替换为另一个(可能把手更容易替换Jinja,反之亦然)。请注意,这两个模板引擎位于不同的位置。Jinja2将在服务器端运行,Handlebar将在客户端运行。如果需要,可以在不受干扰的

我正在尝试用javascript编写一个应用程序,该应用程序使用的是ember.js库,它严重依赖于Handlebar模板系统。然而,我使用的是FLASK,它也使用了jinja模板系统


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

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


尽管如此,如果您有一个像ember.js这样的富客户机框架,那么实际上不需要使用服务器端模板。在您的情况下,Flask服务器可能会有通过ajax请求将数据发送回ember.js客户端的路由,因此客户端确实是进行模板渲染的最佳场所。

正如@Miguel所说,如果您使用ember.js,我想如果您不想渲染这些模板,只需返回flask.send_文件(此处为html文件),而不是返回flask.render_模板(此处为html文件)。有关更多详细信息,请参阅。

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

事实上,我找到了一个解决方案,基于以下内容:


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

{% raw %}
<script id="foo-template" type="text/x-handlebars-template">
    <p>{{foo}} - {{bar}}</p>
</script>
{% endraw %}
{%raw%}
{{foo}}-{{bar}

{%endraw%}
将html文件作为静态文件处理更好。在开发过程中,Flask可以直接从“静态”文件夹为它们提供服务。在生产过程中,web服务器应该绕过Flask提供这些文件。您应该只对ajax请求使用Flask。祝你的项目好运!我在服务器上使用node.js,并混合使用jade和handlebar模板。Jade仍然给了我,最重要的是我的设计师和另一个非技术人员一个非常容易编辑的文件。(他们仍然可以编辑原始html,但jade真的很干净)当我必须输入Handlebar操作并链接到的时,我只需在模板中使用原始html。最好的web应用程序(性能最好)在第一次加载时呈现完整的html页面,然后使用客户端呈现来更新它。依靠客户端完全引导初始页面会显著增加页面负载(必须进行后续ajax调用)。应该注意的是,手柄可以在任意一侧呈现,但Jinja在客户端很少。
{% raw %}
<script id="foo-template" type="text/x-handlebars-template">
    <p>{{foo}} - {{bar}}</p>
</script>
{% endraw %}