From 81fb3224f0e7cd4798e6308f48e43d7a32da3591 Mon Sep 17 00:00:00 2001 From: Hans Puettmann Date: Sun, 24 May 2026 19:35:32 +0200 Subject: [PATCH] Fix: Markdown-Filter liefert jetzt Markup, sonst escaped Jinja2 die HTML-Tags MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Symptom: auf /lektion/1 waren ,

,
    ,

    als Text zu sehen statt gerendert. Ursache: markdown_filter gab einen normalen str zurueck, und Jinja2 escaped str-Werte per Default fuer XSS-Schutz. Fix: Rueckgabe als markupsafe.Markup() — markiert das Ergebnis als 'bereits escaped, hands off'. Betrifft auch andere Stellen, die {{ ...|markdown }} nutzen (cockpit.html bei Projekt-Beschreibung). --- app.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/app.py b/app.py index 32b3903..be018e7 100644 --- a/app.py +++ b/app.py @@ -41,17 +41,22 @@ app.register_blueprint(bp_api) # Markdown-Filter fuer Templates (Pattern wie arduino.lehrstun.de) # =========================================================================== import markdown as _markdown +from markupsafe import Markup @app.template_filter("markdown") def markdown_filter(text): + """Rendert Markdown zu HTML und markiert das Ergebnis als 'safe', + damit Jinja2 die HTML-Tags nicht escaped (sonst sieht man + statt fettem Text).""" if not text: return "" - return _markdown.markdown( + html = _markdown.markdown( text, extensions=["fenced_code", "tables", "nl2br"], output_format="html5", ) + return Markup(html) # ===========================================================================