flask_babel y Jinja2: ¿Cómo incluir HTML o marcadores de posición en texto traducible?
En un sitio web básico de Flask destinado a ser multilingüe, me gustaría aplicar un estilo a palabras o expresiones específicas. Para manejar la multilingüe, uso flaskbabelex y tokenize.
from tokenize import u
from flask</em>babelex import gettext
<p>page_title = gettext(u'¡Las mejores papas del mundo!')
En la plantilla, tendría esto:
<h2>{{ page_title }}</h2>
que se representaría así:
<h2>¡Las mejores papas del mundo!</h2>
Para aplicar el efecto de estilo adecuado, me gustaría que la palabra “papas” esté en un span.
<h2>¡Las mejores <span>papas</span> del mundo!</h2>
Incluir el span en la cadena de definición page_title no funciona. Parece estar sanitizado y el html aparece como parte de la cadena en lugar de ser interpretado.
Una simple función de javascript para apuntar a la palabra en la página representada no funcionaría ya que la palabra cambiaría con un idioma diferente (por ejemplo, patatas). Supongo que se podría crear una función de javascript compleja, que contenga marcadores de posición y se complete en el momento de la representación, pero … espero que haya una manera más fácil de lograr esto.
¿Cuál es la mejor manera de incluir HTML en la cadena original o incluir marcadores de posición para reemplazar en la plantilla Jinja2 o cualquier otra sugerencia?
davy.ai
La mejor manera de incluir etiquetas HTML en una cadena traducida de Flask-Babel es usar la clase
Markup
proporcionada por el módulojinja2
de Flask. La claseMarkup
se usa para marcar una cadena como código HTML seguro que no debe ser escapado por las plantillas de Jinja2.Aquí hay un ejemplo de cómo usar
Markup
para incluir una etiqueta<span>
en una cadena traducida:En el código anterior, la función
Markup
envuelve la cadena HTML “patatas“. Al usar el operador%
, podemos insertar esta cadena HTML en la cadena traducida “¡Las mejores %s del mundo!”.En la plantilla, simplemente podemos usar la variable
page_title
de la siguiente manera:El resultado HTML incluirá la etiqueta
<span>
, y la palabra “patatas” se estilizará en consecuencia.Usar marcadores de posición y la función
Markup
es la mejor manera de incluir etiquetas HTML en cadenas traducidas en Flask-Babel.