Ist es möglich, Jinja2 autoescape
zu überladen, so dass es etwas auf eine benutzerdefinierte Weise (d. h. etwas anderes als HTML wie LaTeX) entkommt?
Hier ist ein Beispiel, das versucht, TeX
zu umgehen.
Wenn Sie den obigen Befehl ausführen, wird Folgendes ausgegeben:
%Vor% Das Problem hier ist, dass HTML-Escaping verwendet wird. Daher sollten {
und }
mit Escapezeichen versehen werden, aber nicht, und <
wird in <
konvertiert, sollte dies aber nicht sein.
Ich möchte die Escape-Funktion überladen, die Jinja2 verwendet, um Variablen zu entkommen.
Mein erster Gedanke ist, finalize
zu überladen und autoescape
zu deaktivieren. z.B.
Die Ausgabe ist falsch, weil der Haupttext nicht in Markup
(d. h. eine als sicher markierte Zeichenfolge) steht:
Wenn ich autoescape
auf True setze und in finalize belasse, funktioniert fast (und in diesem Beispiel funktioniert es):
Das Aktivieren von autoescape
on funktioniert, da der Haupttext für die Vorlage als Markup
(d. h. sicher) erstellt wird.
Hier liegt jedoch das Problem, wenn ich die Eingabe in eine Liste ändere, die join
ed:
Wenn ich das mache, bekomme ich:
%Vor% Es scheint so, als würde HTML autoescape
auf den Elementen von 'content' statt finalize
ausgeführt. Die einfachste Lösung, vorausgesetzt, dass Jinja2 und sein Autocaping lose gekoppelt sind, scheint eine AutoScape-Funktion zu überlasten. Ich kann das nicht herausfinden, und das Beste, was ich mir ausgedacht habe, ist die Funktion finalize
.
Gibt es eine bessere Möglichkeit, das Escapen von TeX
als das Überladen der Funktion finalize
zu behandeln? Kann man autoescape
überladen?
Zum Beispiel könnte man ein benutzerdefiniertes Markup-Paket installieren? (eine Wahl, die ich lieber vermeiden würde)
Danke fürs Lesen.