Jinja2 模板引擎可以使用 AngularJS 吗?
Is it possible to use AngularJS with the Jinja2 template engine?
我有一个 Flask 站点,我想使用 AngularJS JavaScript 框架。不幸的是,分隔符似乎重叠了。
如果 Jinja2 都依赖双花括号 ({{ expr }}
),我该如何将 Angular 与 Jinja2 一起使用?有可能吗?
你有一些选择。
1) 更改 Angular 的分隔符号:
var app = angular.module('Application', []);
app.config(['$interpolateProvider', function($interpolateProvider) {
$interpolateProvider.startSymbol('{a');
$interpolateProvider.endSymbol('a}');
}]);
为开始和结束符号选择的任何内容都将作为新的分隔符。在这种情况下,您可以使用 {a some_variable a}
.
将变量表示为 Angular
这种方法的优点是只需要设置一次并且是显式的。
2) 更改 Jinja2 的分隔符号。
在您绑定到应用程序的 Flask
对象上重写或子类 Flask.jinja_options.update
(相关变量: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) 输出一个
raw block 在 Jinja2 中使用 {% raw %}
或 {% verbatim %}
:
<ul>
{% raw %}
{% for item in seq %}
<li>{{ some_var }}</li>
{% endfor %}
{% endraw %}
</ul>
4) 使用Jinja2编写模板中的花括号:
{{ '{{ some_var }}' }}
这将在 HTML.
中输出为 {{ some_var }}
我显然更喜欢方法 #1,但以上任何一种方法都行得通。
还有另一种选择:flask-triangle 是一个扩展,可帮助您构建表单,同时在 jinja2 中集成 angular 模板。
无需更改 angular(或 jinja2)括号定界符,您可以简单地添加一个标识符来告诉 jinja2 表达式是否必须呈现为 angular。只需在变量后添加 |angular
:
<div>{{variable|angular}}</div>
将在 HTML 输出中呈现为:
<div>{{variable}}</div>
请注意 flask-triangle 还具有其他功能(用于构建 angular 样式的表单),但我认为这可能是一个有价值的选择angular jinja2 中的模板更具可读性。
我有一个 Flask 站点,我想使用 AngularJS JavaScript 框架。不幸的是,分隔符似乎重叠了。
如果 Jinja2 都依赖双花括号 ({{ expr }}
),我该如何将 Angular 与 Jinja2 一起使用?有可能吗?
你有一些选择。
1) 更改 Angular 的分隔符号:
var app = angular.module('Application', []);
app.config(['$interpolateProvider', function($interpolateProvider) {
$interpolateProvider.startSymbol('{a');
$interpolateProvider.endSymbol('a}');
}]);
为开始和结束符号选择的任何内容都将作为新的分隔符。在这种情况下,您可以使用 {a some_variable a}
.
这种方法的优点是只需要设置一次并且是显式的。
2) 更改 Jinja2 的分隔符号。
在您绑定到应用程序的 Flask
对象上重写或子类 Flask.jinja_options.update
(相关变量: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) 输出一个
raw block 在 Jinja2 中使用 {% raw %}
或 {% verbatim %}
:
<ul>
{% raw %}
{% for item in seq %}
<li>{{ some_var }}</li>
{% endfor %}
{% endraw %}
</ul>
4) 使用Jinja2编写模板中的花括号:
{{ '{{ some_var }}' }}
这将在 HTML.
中输出为{{ some_var }}
我显然更喜欢方法 #1,但以上任何一种方法都行得通。
还有另一种选择:flask-triangle 是一个扩展,可帮助您构建表单,同时在 jinja2 中集成 angular 模板。
无需更改 angular(或 jinja2)括号定界符,您可以简单地添加一个标识符来告诉 jinja2 表达式是否必须呈现为 angular。只需在变量后添加 |angular
:
<div>{{variable|angular}}</div>
将在 HTML 输出中呈现为:
<div>{{variable}}</div>
请注意 flask-triangle 还具有其他功能(用于构建 angular 样式的表单),但我认为这可能是一个有价值的选择angular jinja2 中的模板更具可读性。