Je construis un admin pour Flask et SQLAlchemy, et je veux passer le HTML pour les différentes entrées à ma vue en utilisant render_template
. Le cadre de modélisation semble échapper automatiquement au HTML, de sorte que tous les caractères <"'>
sont convertis en entités HTML. Comment puis-je désactiver cela pour que le HTML s'affiche correctement ?
Réponses
Trop de publicités?MarkupSafe fournit le comportement d'autoéchapage de Jinja. Vous pouvez importer Markup
et l'utiliser pour déclarer une valeur HTML à l'abri du code :
from markupsafe import Markup
value = Markup('<strong>The HTML String</strong>')
Passez-le aux modèles et vous n'avez pas à utiliser le filtre |safe
dessus.
À partir de la section Jinja docs HTML Échappement :
Lorsque l'échappement automatique est activé, tout est échappé par défaut, à l'exception des valeurs explicitement marquées comme sûres. Ceux-ci peuvent être marqués par l'application ou dans le modèle en utilisant le filtre
|safe
.
Exemple :
<div class="info">
{{data.email_content|safe}}
</div>
Lorsque vous avez beaucoup de variables qui n'ont pas besoin d'être échappées, vous pouvez utiliser un bloc de substitutionautoescape
{% autoescape false %}
{{ something }}
{{ something_else }}
<b>{{ something_important }}</b>
{% endautoescape %}