Ich schreibe eine Klasse, die von einem benutzerdefinierten Vorlagenfilter zurückgegeben wird. Es hat eine __str__
Methode, die HTML zurückgibt. Ich möchte nicht, dass HTML maskiert wird.Markieren einer Klasse als "sicher" für das Rendern in Vorlagen
Ich habe versucht, nur mark_safe
auf meine Zeichenfolge vor der Rückgabe von der __str__
-Methode aufrufen, aber das Ergebnis ist escaped. Ich gehe davon aus, dass Django überprüft, ob das Objekt sicher ist, bevor es in eine Zeichenfolge konvertiert wird?
Kann ich irgendwie die Klasse selbst als sicher markieren?
z.B.
class ParagraphTag(object):
def __init__(self, text):
self.text = text
def __str__(self):
return mark_safe('<p>{}</p>'.format(self.text + 'baz'))
@register.filter(name='paragraph_tag')
def paragraph_tag(text):
return ParagraphTag(text)
Das Rendern eines Absatz-Tag-Objekts in einer Vorlage führt zu einem Escape-Zeichen.
z.B. {{ paragraph_tag }}
-><p>foo</p>
Wenn ich mark_safe
auf dem ParagraphTag
Objekt selbst nennen, wenn es von meiner Vorlage Filter zurückkehrt, dann wird es in ein SafeBytes
Objekt verwandelt, das ist nicht das, was ich will. Ich möchte das Rich-Objekt in meiner Vorlage verfügbar haben und es nur in eine Zeichenfolge konvertieren, wenn es gerendert wird.
können Sie nicht sicher aus dem Vorlagenfilter zurückkehren? Es würde helfen, wenn Sie ein Beispiel-Code-Schnipsel zeigen könnten. – Sayse
@Sayse hat ein Beispiel hinzugefügt – Acorn
In Ihrem ersten Satz sagen Sie, dass diese Klasse von einem benutzerdefinierten Vorlagenfilter zurückgegeben wird, also haben Sie ein Beispiel dafür? es würde mehr Sinn machen (für mich), darin sicher zu sein. Welches Problem versuchen Sie andernfalls zu lösen? – Sayse