可以将AngularJS与Jinja2模板引擎一起使用吗?

发布于 2021-02-02 23:11:13

我有一个Flask网站,并且想使用AngularJS JavaScript框架。不幸的是,似乎分隔符重叠。

如果两个都依赖于双花括号({{ expr }}),如何将Angular与Jinja2结合使用?可能吗

关注者
0
被浏览
68
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    你有一些选择。

    1)更改Angular的定界符表示法:

    var app = angular.module('Application', []);
    
    app.config(['$interpolateProvider', function($interpolateProvider) {
      $interpolateProvider.startSymbol('{a');
      $interpolateProvider.endSymbol('a}');
    }]);
    

    无论选择什么作为开始和结束符号,都将充当新的分隔符。在这种情况下,你可以使用将变量表示为Angular {a some_variable a}。

    这种方法的优点是只需要设置一次就可以了。

    2)更改Jinja2的定界符表示法。

    覆盖或子Flask.jinja_options.update上Flask,绑定到你的应用程序对象(相关瓦尔:block_start_string,block_end_string,variable_start_string,variable_end_string,comment_start_string,comment_end_string)

    jinja_options = app.jinja_options.copy()
    
    jinja_options.update(dict(
        block_start_string='<%',
        block_end_string='%>',
        variable_start_string='%%',
        variable_end_string='%%',
        comment_start_string='<#',
        comment_end_string='#>'
    ))
    app.jinja_options = jinja_options
    

    由于敏感数据从服务器端未展开的风险较高,因此我建议在你不是唯一开发人员的任何项目中更改前端(即Angular)的语法。

    3)使用或在Jinja2中输出 原始块:{% raw %}{% verbatim %}

    <ul>
    {% raw %}
      {% for item in seq %}
          <li>{{ some_var }}</li>
      {% endfor %}
    {% endraw %}
    </ul>
    

    4)使用Jinja2将花括号写在模板中:

    {{ '{{ some_var }}' }}
    

    这将以{{ some_var }}HTML格式输出。

    我对方法1的偏好是显而易见的,但是以上任何一种方法都可以。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看