Jinja2模板引擎可以使用Angular吗?
我有一个Flask站点,我想使用Angular JavaScript框架。 不幸的是,似乎分隔符重叠。
如果同时使用双花括号( {{ expr }}
),我如何在Jinja2中使用Angular? 这甚至有可能吗?
你有一些select。
1)更改Angular的分隔符表示法:
var app = angular.module('Application', []); app.config(['$interpolateProvider', function($interpolateProvider) { $interpolateProvider.startSymbol('{a'); $interpolateProvider.endSymbol('a}'); }]);
无论select什么开始和结束符号将作为新的分隔符。 在这种情况下,您可以使用{a some_variable a}
向Angular表示一个variables。
这种方法的优点是只需要设置一次而且明确。
2)更改Jinja2的分隔符号。
在绑定到您的应用程序的Flask
对象上重写或子类Flask.jinja_options.update
(相关variables: 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
由于敏感数据从服务器端不能扩展的风险较高,我build议在任何不是唯一开发者的项目上更改前端(即Angular)的语法。
3)使用{% raw %}
或{% verbatim %}
输出Jinja2中的原始块 :
<ul> {% raw %} {% for item in seq %} <li>{{ some_var }}</li> {% endfor %} {% endraw %} </ul>
4)使用Jinja2在模板中编写花括号:
{{ '{{ some_var }}' }}
这将在HTML中输出为{{ some_var }}
。
我的方法#1的偏好是显而易见的,但以上任何一项都可以。
还有另外一个select: 烧瓶三angular是一个扩展名,可以帮助你在angular模板中集成angular模板。 而不是更改angular度(或jinja2)括号分隔符,您可以简单地添加一个标识符告诉jinja2如果expression式必须呈现为一个angular度。 只需在variables之后添加|angular
:
<div>{{variable|angular}}</div>
这将在HTML输出中呈现为:
<div>{{variable}}</div>
请注意, 烧瓶三angular形还带有其他function(用于构buildangular度样式的表单),但是我认为在jinja2中使angular度模板更具可读性是一个很有价值的select。