what variable sort last jinja for comment python angularjs flask jinja2 delimiter

python - variable - macros jinja2



¿Es posible usar AngularJS con el motor de plantillas Jinja2? (2)

También hay otra opción: el frasco-triángulo es una extensión para ayudarlo a construir formas mientras integra la plantilla angular en jinja2. En lugar de cambiar el delimitador de paréntesis angular (o jinja2), simplemente puede agregar un identificador para indicarle a jinja2 si la expresión debe representarse como angular. Simplemente agregue |angular después de su variable:

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

Que se representará en la salida HTML como:

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

Tenga en cuenta que el frasco-triángulo también viene con otras características (para construir formas en estilo angular), sin embargo, creo que podría ser una opción valiosa para hacer que la plantilla angular en jinja2 sea más legible.

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

¿Cómo uso Angular con Jinja2 si ambos se basan en llaves dobles ( {{ expr }} )? ¿Es posible?


Tienes algunas opciones.

1) Cambie la notación del delimitador para 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 los nuevos delimitadores. En este caso, expresaría una variable a Angular usando {a some_variable a} .

Este enfoque tiene la ventaja de que solo necesita establecerse una vez y ser explícito.

2) Cambiar la notación delimitador para Jinja2.

Flask.jinja_options.update o subclase Flask.jinja_options.update en el objeto Flask 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 procesar en Jinja2 usando {% raw %} o {% verbatim %} :

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

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

{{ ''{{ some_var }}'' }}

esto se mostrará como {{ some_var }} en el HTML.

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