9
votes

Désactiver AutooesCape dans le flacon

Je veux montrer du texte à l'utilisateur. La variable de chaîne que j'envoie plusieurs caractères de New ligne et je ne veux pas \ n à afficher. Donc, j'ai fait: xxx

bar.html: xxx

Cependant, autocoescape est activé et ce que je vois est f
O
O . De plus, ma méthode n'est pas sûre, je veux chaque étiquette sauf
à échapper du texte. J'ai examiné le module de flask.Markup et mais elles ne fonctionnent pas vraiment non plus.

Quelle est la bonne façon de faire cela?


0 commentaires

3 Réponses :


1
votes

Tourner AutooScaping OFF dans le modèle JINJA2 ou utilisez un bloc brut .


3 commentaires

Cela ne serait pas sûr. Question des États "Ma méthode n'est pas sûre, je veux chaque étiquette sauf
à échapper du texte" afin que ce soit un trou XSS.


Vous êtes correct - je n'ai pas lu la question avec précaution suffisamment; Voir ma deuxième réponse pour une meilleure solution.


Je voulais savoir comment éteindre les autonscataires et le lien Doc m'a sauvé un peu de temps.



9
votes

Il y a deux approches raisonnables que vous pourriez prendre.

Solution 1 h2>

Comme vous combinez une entrée dangereuse avec HTML dans une seule variable flask.Markup code> est en fait une façon pratique de faire cela. L'idée de base est de diviser votre texte sur les caractèresWLINE, assurez-vous de vous échapper à HTML échapper à chacune des lignes que vous ne faites pas confiance, puis de les coller ensemble jointes par
code> Tags que vous faites confiance. . P>

Voici l'application complète pour le démontrer. Il utilise le même modèle bar.html code> comme dans votre question. Notez que j'ai ajouté un système HTML dangereux au code> code> comme une démonstration de la raison pour laquelle la mise hors tension automatique est pas forte> une solution sûre à votre problème. P>

<html>
    {%- for line in text -%}
        {{ line }}
        {%- if not loop.last -%}
            <br />
        {%- endif -%}
    {%- endfor -%}
</html>


2 commentaires

La seconde moitié de votre réponse est exactement ce que je pensais.


C'est ma solution préférée aussi. J'ai ajouté une conclusion pour que cela soit clair et expliquer pourquoi.



6
votes

Je quitterai Ma réponse précédente en tant que mauvais "

un très Une bonne solution pour ce genre de chose est un filtre personnalisé , qui laisserait Vous utilisez une syntaxe telle que xxx

qui, commodément, vous pouvez faire avec Ce NL2BR Snippet de filtre (ou personnalisez facilement)!


0 commentaires