0
votes

Comment remplacer '\ n' dans la chaîne par '
' dans l'application Flask?

J'ai essayé de modifier une chaîne avant de la transmettre à ma page HTML dans Flask (en remplaçant les occurrences de '\ n' par '
'), mais les méthodes typiques que j'utilise ne fonctionnent pas pour une raison quelconque .

finalstring = textstring.replace('\n', '<br>')
return render_template('my-form-result.html', emailresponse = finalstring)

Cela devrait fonctionner, mais pour une raison quelconque, rien n'est remplacé. Comment puis-je faire fonctionner cela? Merci!


6 commentaires

Je n'ai jamais travaillé avec Flask, mais il semble que le moteur de création de modèles Flasks échappe aux structures HTML (ce qui est une bonne chose). Pour votre cas d'utilisation, vous devez comprendre comment donner à flask explicite raw-html


Est-ce que cela répond à votre question? Transmission du code HTML au modèle à l'aide de Flask / Jinja2


Pouvez-vous nous montrer à quoi ressemble "textstring"?


@ codeflush.dev Il échappe au HTML, sauf indication contraire, ce qui n'est pas une bonne idée.


Que voulez-vous dire, "rien n'est remplacé" ? Cela ne peut pas être. Essayez print (repr (finalstring)) et voyez s'il contient des \ n . Expliquez exactement ce qui ne se passe pas correctement.


C'est pourquoi je suis si confus. Cela devrait fonctionner. J'ai juste essayé print (repr (finalstring)) et il a juste imprimé une chaîne vide.


3 Réponses :


0
votes

Clause de non-responsabilité: je n'ai jamais travaillé avec Flask, je l'ai juste recherché et j'espère qu'il fera ce que vous voulez faire.

Donc, quelque part dans votre modèle my-form-result.html , vous devriez rechercher une ligne contenant:

{% for line in emailresponse.split('\n') %}
{{ line }}
<br />
{% endfor %}

Vous pouvez le remplacer par:

{{ emailresponse }}

Pour ajouter un br code> après chaque nouvelle ligne


0 commentaires

0
votes

Votre code replace () est correct. Assurez-vous d'échapper au code HTML dans le modèle:

finalstring = textstring.replace('\n', '<br>')
print(finalstring)
return render_template('my-form-result.html', emailresponse = finalstring)

Pour diagnostiquer, essayez ceci:

{{ emailresponse|safe }}

Aussi, montrez-nous le code source de la page Web, pour voir ce qui est réellement rendu dans le modèle


2 commentaires

Merci pour votre réponse! Malheureusement, j'ai essayé chacune des solutions recommandées et rien n'a fonctionné. Qu'est-ce qui ne va pas?


Montrez-nous le rendu de ceci à partir de View Source Code de votre navigateur.



0
votes

Une meilleure façon de remplacer \ n en HTML consiste à utiliser des styles CSS .

Votre replace () est correct. Déboguez votre code et assurez-vous qu'il y a \ n avant replace().

Pour pouvoir afficher les sauts de ligne en HTML, vous devez utiliser filtre sûr dans le modèle. Mais attention, vous vous exposez aux attaques XSS. Pour contourner ce problème, vous devez échapper la chaîne avant de remplacer le caractère \ n . Voici le code:

from flask import escape

...
...
    safe_html = str(escape(text)).replace('\n', '<br/>')
    return render_template('[HTML file].html', safe_html=safe_html)

---------
#in the template:
   <span> {{ safe_html | safe }} </span>

Si vous n'utilisez pas l'appel str () avant de remplacer, alors le
sera également scapé. Parce que la valeur de retour de escape () n'est pas string.


0 commentaires