Ich möchte dem Benutzer einen Text zeigen. Die String-Variable, die ich sende, hat mehrere Newline-Zeichen und ich möchte nicht, dass \n
angezeigt wird. also tat ich:
bar.html:
%Vor% Allerdings ist Autoescape aktiviert und was ich sehe ist f<br />o<br />o
. Auch meine Methode ist nicht sicher. Ich möchte, dass alle Tags außer <br />
aus dem Text entfernt werden. Ich habe mir flask.Markup Modul angesehen und sie funktionieren auch nicht wirklich.
Was ist der richtige Weg, dies zu tun?
Es gibt zwei vernünftige Ansätze, die Sie ergreifen könnten.
Da Sie unsichere Eingabe mit HTML in eine einzelne Variable kombinieren, ist flask.Markup
eigentlich ein praktischer Weg, dies zu tun. Grundidee ist, Ihren Text auf die Zeilenumbruchzeichen zu teilen, stellen Sie sicher, dass Sie HTML jede der Zeilen, die Sie nicht vertrauen, entkernen, dann kleben Sie sie wieder zusammengefügt von <br />
Tags, denen Sie vertrauen.
Hier ist die komplette App, um das zu demonstrieren. Es verwendet dieselbe bar.html
Vorlage wie in Ihrer Frage. Beachten Sie, dass ich dem footext
einige unsichere HTML hinzugefügt habe, um zu demonstrieren, warum das Deaktivieren von AutoScaping nicht eine sichere Lösung für Ihr Problem ist.
Eine weitere Option wäre, die Komplexität in Ihre Vorlage zu verschieben, sodass Sie eine viel einfachere Ansicht erhalten. Teilen Sie einfach footext
in Zeilen, dann können Sie in Ihrer Vorlage darüberschleifen und AutoScaping wird dafür sorgen, dass dies sicher bleibt.
Einfachere Ansicht:
%Vor%Template bar.html wird zu:
%Vor% Ich persönlich bevorzuge Lösung 2, weil es die Rendering-Probleme (Zeilen sind durch <br />
-Tags getrennt) in die Vorlage stellt, wo sie hingehören. Wenn Sie dies in Zukunft ändern möchten, um beispielsweise die Zeilen in einer Aufzählung anzuzeigen, müssen Sie nur Ihre Vorlage und nicht Ihren Code ändern.
Ich werde meine vorherige Antwort als schlechtes Beispiel verlassen.
Eine sehr gute Lösung für diese Art der Sache ist ein benutzerdefinierten Filter , die Sie lassen würde Verwenden Sie eine Syntax wie
%Vor%, die bequem, die Sie diesen nl2br
-Filter Schnipsel tun können (oder leicht anpassen)
Verwandeln Sie autoecaping in die Vorlage "Jinja2" oder verwenden Sie ein Raubblock .