Files
BillManager/template_helper.py

37 lines
1.2 KiB
Python

"""
Helper pour injecter automatiquement current_user dans le contexte Jinja2.
"""
from fastapi import Request
from fastapi.templating import Jinja2Templates
from starlette.responses import HTMLResponse, Response
def render(templates: Jinja2Templates, template_name: str,
request: Request, context: dict = None,
status_code: int = 200) -> HTMLResponse:
ctx = context or {}
ctx["request"] = request
if "current_user" not in ctx:
ctx["current_user"] = getattr(request.state, "current_user", None)
# Compatible avec toutes les versions de Starlette/FastAPI
response = templates.TemplateResponse(template_name, ctx)
response.status_code = status_code
return response
def render_xml(templates: Jinja2Templates, template_name: str,
request: Request, invoice: "Invoice",
filename: str = "factur-x.xml") -> Response:
xml_content = templates.env.get_template(template_name).render(
request=request,
invoice=invoice,
seller=invoice.seller,
buyer=invoice.buyer,
)
return Response(
content=xml_content,
media_type="application/xml",
headers={"Content-Disposition": f'attachment; filename="{filename}"'}
)