2015-05-21 4 views
44

У меня есть сайт Flask, и я хочу использовать структуру Angular JavaScript. К сожалению, похоже, что разделители перекрываются.Можно ли использовать Angular с движком Jinja2?

Как использовать угловой с Jinja2, если оба полагаются на двойные фигурные скобки ({{ expr }})? Возможно ли это?

ответ

79

У вас есть варианты.

1) Изменить разделитель для обозначения Угловой:

var app = angular.module('Application', []); 

app.config(['$interpolateProvider', function($interpolateProvider) { 
    $interpolateProvider.startSymbol('{a'); 
    $interpolateProvider.endSymbol('a}'); 
}]); 

Что бы ни выбрали для начала и конца символов будет выступать в качестве новых разделителей. В этом случае вы должны выразить переменную Angular, используя {a some_variable a}.

Этот подход имеет то преимущество, что его необходимо установить только один раз и быть явным.

2) Измените обозначение разделителя на Jinja2.

Override или подкласс 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 

Как есть высокий риск конфиденциальных данных не расширяясь с серверной стороны, я предлагаю вместо этого изменить синтаксис на front-end (т.е. Angular) на любой проект, в котором вы не являетесь единственным разработчиком.

3) Выход в Jinja2 raw block использованием {% raw %} или {% verbatim %}:

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

4) Использование jinja2 писать фигурные скобки в шаблоне:

{{ '{{ some_var }}' }} 

это будет выводиться как {{ some_var }} в HTML.

Мои предпочтения в отношении подхода №1 очевидны, но любой из вышеперечисленных функций будет работать.

1

Существует также еще один вариант: флакон-треугольник - это расширение, которое поможет вам создавать формы при интеграции угловых шаблонов в jinja2. Вместо изменения углового (или jinja2) разделителя брекетов вы можете просто добавить идентификатор, чтобы сообщить jinja2, если выражение должно отображаться как угловое. Просто добавьте |angular после переменного:

<div>{{variable|angular}}</div> 

выдаваемые на выходе HTML как:

<div>{{variable}}</div> 

Пожалуйста, обратите внимание, что склянки-треугольник также поставляется с другими функциями (для построения форм в угловом стиль), однако я думаю, что это может быть ценным вариантом сделать угловое шаблонирование в jinja2 более читаемым.

Смежные вопросы