【问题标题】:Can you use two HTML templates such as Handlebars and Jinja可以使用两个 HTML 模板,例如 Handlebars 和 Jinja
【发布时间】:2013-06-26 18:41:30
【问题描述】:

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

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

【问题讨论】:

    标签: ember.js flask jinja2 handlebars.js


    【解决方案1】:

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

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

    【讨论】:

    • 我正在使用 node.js 作为服务器,并且正在使用翡翠与车把模板的混合。 Jade 仍然为我,最重要的是我的设计师和另一个非技术人员提供了一个非常容易编辑的文件。 (他们仍然可以编辑原始 html,但玉真的很干净)当我必须放入把手动作和链接到的时,我只是在模板中使用原始 html。对我们来说效果很好。
    • 最好的网络应用程序(最高性能)在第一次加载时渲染一个完整的 html 页面,然后使用客户端渲染来更新它。依赖客户端完全引导初始页面会显着增加页面负载(必须进行后续 ajax 调用)。
    • 应该注意——Handlebars可以在任一侧渲染,但是Jinja在客户端很少见。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 最好将 html 文件作为静态文件处理。在开发过程中,Flask 可以直接从“静态”文件夹中提供服务。在生产过程中,您的 Web 服务器应该绕过 Flask 来提供这些文件。您应该只将 Flask 用于 ajax 请求。祝你的项目好运!
      【解决方案4】:

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

      我实际上找到了一个使用Pybars 的解决方案,基于来自Khan Academy's style guide 的一些阅读:

      @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 )))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-03-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-28
        • 2021-08-10
        • 2019-05-22
        相关资源
        最近更新 更多