with example jquery jinja2 jquery-templates

jquery - example - python ajax request



Evitar los bigotes ambiguos de Jinja2 que incluyen plantillas jQuery (2)

Encontré esto a través de google mientras experimentaba con polímeros, pero no me gustó la solución propuesta, así que otra alternativa: usar filtros.

En tu código python define un filtro:

#Filter to create curly braces @app.template_filter(''curly'') def curly(value): #Handle value as string {{''foo''|curly}} if(isinstance(value,str)): return_value = value #Handle value directly. {{foo|curly}} else: return_value = value._undefined_name return "{{" + return_value + "}}"

Luego, en tu plantilla puedes usar {{''foo''|curly}} o {{foo|curly}}

PD: Si no usa el matraz, creo que no puede usar el decorador, pero en su lugar debe registrar el filtro explícitamente: environment.filters[''curly''] = curly .

Estoy tratando de insertar plantillas jQuery en plantillas Jinja2 . Por desgracia, ambos (en la configuración predeterminada) usan los bigotes {{ & }} para indicar expresiones y literales, respectivamente.

Estoy insertando mis plantillas jQuery en HTML con etiquetas de script , como esto:

<script type=''text/x-jquery-template''> <div>The people are: {{ each people }} ${$value} {{ /each }} </div> </script>

Sin embargo, si lo anterior está en una plantilla de Jinja, se resiste porque Jinja intenta interpretar each como un literal.

En estas circunstancias (ya tenemos muchas plantillas) no es práctico cambiar los delimitadores inicial y final de Jinja2 para las variables. Además, es confuso, disminuye la interoperabilidad y requiere capacitación adicional. Es preferible evitar esta opción.

Así que las dos cosas alternativas que he pensado para resolver esto son:

  1. Jinja2 escapando de cada ''{{'' ''y''}} '', que no estoy muy seguro de cómo hacerlo mejor ("{{" {{"}}`, quizás, pero eso es detallado);

  2. Más práctico, quizás ideal, sería decirle a Jinja2 que no analice un bloque de código, tal vez a través de una extensión jQuery.

Estaría agradecido por los pensamientos y comentarios. Gracias por leer.


Puede usar la construcción {% raw %}{% endraw %} para aliviar sus problemas de escape (directamente de los documentos de Jinja2 ).

Ejemplo:

<script type=''text/x-jquery-template''> <div>The people are: {% raw %}<!-- Everything in here will be left untouched by Jinja2 --> {{ each people }} ${$value} {{ /each }} {% endraw %} </div> </script>