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