一尘不染

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

angularjs

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

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


阅读 277

收藏
2020-07-04

共1个答案

一尘不染

您有一些选择。

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.updateFlask,绑定到你的应用程序对象(相关瓦尔:block_start_stringblock_end_stringvariable_start_stringvariable_end_stringcomment_start_stringcomment_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的偏好是显而易见的,但是以上任何一种方法都可以。

2020-07-04