¿Es posible utilizar AngularJS con el motor de plantillas Jinja2?

Resuelto asked hace 9 años • 2 respuestas

Tengo un sitio Flask y quiero utilizar el marco JavaScript AngularJS. Desafortunadamente, parece que los delimitadores se superponen.

¿Cómo uso Angular con Jinja2 si ambos dependen de llaves dobles ( {{ expr }})? ¿Es siquiera posible?

 avatar May 21 '15 08:05
Aceptado

Tienes algunas opciones.

1) Cambie la notación delimitadora de Angular:

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

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

Lo que se elija para los símbolos de inicio y fin actuará como nuevos delimitadores. En este caso, expresarías una variable a Angular usando {a some_variable a}.

Este enfoque tiene la ventaja de que sólo es necesario establecerlo una vez y ser explícito.

2) Cambie la notación delimitadora de Jinja2.

Anule o subclase Flask.jinja_options.updateel Flaskobjeto que vincula a su aplicación (vars relevantes: 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

Como existe un mayor riesgo de que los datos confidenciales no se expandan desde el lado del servidor, sugiero cambiar la sintaxis en el front-end (es decir, Angular) en cualquier proyecto en el que no sea el único desarrollador.

3) Genere un bloque sin formato en Jinja2 usando {% raw %}o {% verbatim %}:

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

4) Utilice Jinja2 para escribir las llaves en la plantilla:

{{ '{{ some_var }}' }}

esto se generará como {{ some_var }}en HTML.

Mi preferencia por el enfoque n.° 1 es evidente, pero cualquiera de los anteriores funcionará.

 avatar May 21 '2015 01:05

También hay otra opción: flask-triangle es una extensión que te ayuda a crear formularios mientras integras plantillas angulares en jinja2. En lugar de cambiar el delimitador de corchetes angular (o jinja2), simplemente puede agregar un identificador para indicarle a jinja2 si la expresión debe representarse como angular. Simplemente agregue |angulardespués de su variable:

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

Que se representará en la salida HTML como:

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

Tenga en cuenta que flask-triangle también viene con otras características (para crear formas en estilo angular), sin embargo, creo que podría ser una opción valiosa para hacer que las plantillas angulares en jinja2 sean más legibles.

steel00 avatar Oct 14 '2017 10:10 steel00