fix: bypass Starlette Jinja2Templates, use raw Jinja2 to avoid cache_key hash bug
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
from jinja2 import Environment, FileSystemLoader
|
||||
|
||||
from fastapi import APIRouter, Request
|
||||
from fastapi.responses import HTMLResponse
|
||||
from fastapi.templating import Jinja2Templates
|
||||
from sqlalchemy import func, select
|
||||
|
||||
from app.database import async_session_factory
|
||||
@@ -14,10 +15,13 @@ from app.repositories.tariff import TariffRepository
|
||||
from app.repositories.user import UserRepository
|
||||
|
||||
router = APIRouter(prefix="/admin", tags=["admin"])
|
||||
templates = Jinja2Templates(directory="app/templates")
|
||||
|
||||
router = APIRouter(prefix="/admin", tags=["admin"])
|
||||
templates = Jinja2Templates(directory="app/templates")
|
||||
_env = Environment(loader=FileSystemLoader("app/templates"), auto_reload=False)
|
||||
|
||||
|
||||
def _render(name: str, **context) -> str:
|
||||
template = _env.get_template(name)
|
||||
return template.render(**context)
|
||||
|
||||
|
||||
@router.get("/", response_class=HTMLResponse)
|
||||
@@ -45,19 +49,19 @@ async def dashboard(request: Request):
|
||||
)
|
||||
total_revenue = float((await session.execute(rev_stmt)).scalar_one())
|
||||
|
||||
return templates.TemplateResponse(
|
||||
"dashboard.html",
|
||||
{
|
||||
"request": request,
|
||||
"total_users": total_users,
|
||||
"active_users": active_users,
|
||||
"total_tariffs": total_tariffs,
|
||||
"total_servers": total_servers,
|
||||
"active_servers": active_servers,
|
||||
"total_payments": total_payments,
|
||||
"confirmed_payments": confirmed_payments,
|
||||
"total_revenue": total_revenue,
|
||||
},
|
||||
return HTMLResponse(
|
||||
_render(
|
||||
"dashboard.html",
|
||||
request=request,
|
||||
total_users=total_users,
|
||||
active_users=active_users,
|
||||
total_tariffs=total_tariffs,
|
||||
total_servers=total_servers,
|
||||
active_servers=active_servers,
|
||||
total_payments=total_payments,
|
||||
confirmed_payments=confirmed_payments,
|
||||
total_revenue=total_revenue,
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -67,9 +71,8 @@ async def users_page(request: Request):
|
||||
repo = UserRepository(session)
|
||||
users = await repo.get_all()
|
||||
|
||||
return templates.TemplateResponse(
|
||||
"users.html",
|
||||
{"request": request, "users": users},
|
||||
return HTMLResponse(
|
||||
_render("users.html", request=request, users=users)
|
||||
)
|
||||
|
||||
|
||||
@@ -88,9 +91,13 @@ async def payments_page(request: Request):
|
||||
t = await tariff_repo.get(p.tariff_id)
|
||||
tariffs_map[p.tariff_id] = t.name if t else "—"
|
||||
|
||||
return templates.TemplateResponse(
|
||||
"payments.html",
|
||||
{"request": request, "payments": payments, "tariffs_map": tariffs_map},
|
||||
return HTMLResponse(
|
||||
_render(
|
||||
"payments.html",
|
||||
request=request,
|
||||
payments=payments,
|
||||
tariffs_map=tariffs_map,
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@@ -100,9 +107,8 @@ async def servers_page(request: Request):
|
||||
repo = ServerRepository(session)
|
||||
servers = await repo.get_all()
|
||||
|
||||
return templates.TemplateResponse(
|
||||
"servers.html",
|
||||
{"request": request, "servers": servers},
|
||||
return HTMLResponse(
|
||||
_render("servers.html", request=request, servers=servers)
|
||||
)
|
||||
|
||||
|
||||
@@ -112,7 +118,6 @@ async def tariffs_page(request: Request):
|
||||
repo = TariffRepository(session)
|
||||
tariffs = await repo.get_all()
|
||||
|
||||
return templates.TemplateResponse(
|
||||
"tariffs.html",
|
||||
{"request": request, "tariffs": tariffs},
|
||||
return HTMLResponse(
|
||||
_render("tariffs.html", request=request, tariffs=tariffs)
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user