Jinja2 und nl2br
Verfasst: Montag 16. August 2010, 19:25
Nabend liebes Forum,
ich bin hier leicht am verzweifeln. Ich vermute mal ich habe einfach mal wieder nen Denkfehler...
Ich benutzte momentan Jinja2 um einige Templates für ein kleines Bottle-Projekt zu erstellen. Die Daten werden von Benutzern eingegeben und in der Datenbank abgelegt. Damit vom Benutzer eingegebene HTML-Steuerzeichen nicht angezeicht werden habe ich beim Jinja2-Environment autoescape auf true gesetzt. Nun möchte ich aber die Zeilenumbrüche die in der Datenbank stehen gerne als <br /> in meine Vorlage einfügen. Wenn ich nun im Template mit ``replace`` die Zeilenumbrücke umwandle werden sie zu``<br />`` umgewandelt. Das macht soweit ja auch Sinn.
Ich habs dann vorhin schon mit der Doku versucht die ein Beispiel enthält. Da hat sich zwar ein kleiner Fehler eingeschlichen - ``environmentfilter```importiert und ``evalcontextfilter`` aber mit keinem dieser beiden Filter komme ich zu meinem gewünschten Ergebnis...
meine momentane Konfiguration sieht so aus:
Template Environment:
ein html-Teil schaut mit dann so aus:
wobei bei mir so keine der beiden varianten funtioniert - sicher übersehe ich hier mal wieder das offensichtliche...
Sebastian
ich bin hier leicht am verzweifeln. Ich vermute mal ich habe einfach mal wieder nen Denkfehler...
Ich benutzte momentan Jinja2 um einige Templates für ein kleines Bottle-Projekt zu erstellen. Die Daten werden von Benutzern eingegeben und in der Datenbank abgelegt. Damit vom Benutzer eingegebene HTML-Steuerzeichen nicht angezeicht werden habe ich beim Jinja2-Environment autoescape auf true gesetzt. Nun möchte ich aber die Zeilenumbrüche die in der Datenbank stehen gerne als <br /> in meine Vorlage einfügen. Wenn ich nun im Template mit ``replace`` die Zeilenumbrücke umwandle werden sie zu``<br />`` umgewandelt. Das macht soweit ja auch Sinn.
Ich habs dann vorhin schon mit der Doku versucht die ein Beispiel enthält. Da hat sich zwar ein kleiner Fehler eingeschlichen - ``environmentfilter```importiert und ``evalcontextfilter`` aber mit keinem dieser beiden Filter komme ich zu meinem gewünschten Ergebnis...
meine momentane Konfiguration sieht so aus:
Template Environment:
Code: Alles auswählen
class MyLoader(BaseLoader):
def __init__(self, path):
self.path = path
def get_source(self, environment, template):
path = os.path.join(self.path, template)
if not os.path.exists(path):
raise TemplateNotFound(template)
mtime = os.path.getmtime(path)
with file(path) as f:
source = f.read().decode('utf-8')
return source, path, lambda: mtime == os.path.getmtime(path)
_paragraph_re = re.compile(r'(?:\r\n|\r|\n){2,}')
@contextfilter
def nl2br(eval_ctx, value):
print 'filter benutzt'
result = u'\n\n'.join(u'<p>%s</p>' % p.replace('\n', '<br>\n')
for p in _paragraph_re.split(escape(value)))
if eval_ctx.autoescape:
result = Markup(result)
return result
# environment für Jinja anlegen
env = Environment(line_statement_prefix="#",
variable_start_string="${",
variable_end_string="}",
autoescape = True,
loader=MyLoader(TEMPLATES_DIR))
ein html-Teil schaut mit dann so aus:
Code: Alles auswählen
<div id="grey-box-3">
<p>${data.2}</p>
<p>${data.2| replace("\n", "<br />")}</p>
</div>
Sebastian