fix: tojson filter must return Markup to avoid HTML-escaping quotes
All checks were successful
Deploy / deploy (push) Successful in 15s

Jinja2 autoescaping turns " into " after filters run unless
the filter returns a Markup (safe) object. json.dumps alone produced
broken JS (const REPLICA_NAME = "name";).
Wrap json.dumps output in markupsafe.Markup to prevent escaping.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-25 22:44:23 +01:00
parent 0fd0464fb5
commit 86644abf07

View File

@@ -129,9 +129,10 @@ def create_app() -> FastAPI:
# Templates # Templates
import json as _json import json as _json
from markupsafe import Markup as _Markup
templates_dir = Path(__file__).parent / "templates" templates_dir = Path(__file__).parent / "templates"
templates = Jinja2Templates(directory=str(templates_dir)) templates = Jinja2Templates(directory=str(templates_dir))
templates.env.filters["tojson"] = _json.dumps templates.env.filters["tojson"] = lambda v: _Markup(_json.dumps(v))
# Register UI routes (must come before API to avoid catch-all conflicts) # Register UI routes (must come before API to avoid catch-all conflicts)
from .ui.routes import router as ui_router, setup_templates from .ui.routes import router as ui_router, setup_templates