Skip to content

Commit 3d50770

Browse files
zimingttkxClaude Opus 4.6
andcommitted
fix: Correct starlette TemplateResponse API signature in app.py
The TemplateResponse method in starlette 1.0.0 requires 'request' as the first positional argument, not the template name. All frontend page routes were using the wrong signature causing HTTP 500 errors. Changed from: templates.TemplateResponse("template.html", {"request": request, "page": "xxx"}) To: templates.TemplateResponse(request, "template.html", {"page": "xxx"}) This fixes all frontend page rendering issues for /, /predict, /dashboard, /protection, /train, /tutorial, /explanation and other frontend routes. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent eb2abed commit 3d50770

1 file changed

Lines changed: 16 additions & 20 deletions

File tree

app.py

Lines changed: 16 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -202,71 +202,67 @@ def training_task():
202202

203203
# --- 页面路由 ---
204204
@app.get("/", tags=["Frontend"], response_class=HTMLResponse)
205-
async def serve_home(request: Request): return templates.TemplateResponse("index.html",
206-
{"request": request, "page": "home"})
205+
async def serve_home(request: Request): return templates.TemplateResponse(request, "index.html",
206+
{"page": "home"})
207207

208208

209209
@app.get("/dashboard", tags=["Frontend"], response_class=HTMLResponse)
210210
async def serve_dashboard(request: Request):
211211
"""统计仪表盘页面"""
212-
return templates.TemplateResponse("dashboard.html", {"request": request, "page": "dashboard"})
212+
return templates.TemplateResponse(request, "dashboard.html", {"page": "dashboard"})
213213

214214

215215
@app.get("/training-console", tags=["Frontend"], response_class=HTMLResponse)
216-
async def serve_training_console(request: Request): return templates.TemplateResponse("training.html",
217-
{"request": request,
218-
"page": "training"})
216+
async def serve_training_console(request: Request): return templates.TemplateResponse(request, "training.html",
217+
{"page": "training"})
219218

220219

221220
@app.get("/pipeline-explorer", tags=["Frontend"], response_class=HTMLResponse)
222-
async def serve_pipeline_explorer(request: Request): return templates.TemplateResponse("pipeline.html",
223-
{"request": request,
224-
"page": "pipeline"})
221+
async def serve_pipeline_explorer(request: Request): return templates.TemplateResponse(request, "pipeline.html",
222+
{"page": "pipeline"})
225223

226224

227225
@app.get("/evaluation-report", tags=["Frontend"], response_class=HTMLResponse)
228-
async def serve_evaluation_report(request: Request): return templates.TemplateResponse("evaluation.html",
229-
{"request": request,
230-
"page": "evaluation"})
226+
async def serve_evaluation_report(request: Request): return templates.TemplateResponse(request, "evaluation.html",
227+
{"page": "evaluation"})
231228

232229

233230
@app.get("/live-inference", tags=["Frontend"], response_class=HTMLResponse)
234-
async def serve_live_inference(request: Request): return templates.TemplateResponse("predict.html", {"request": request,
235-
"page": "predict"})
231+
async def serve_live_inference(request: Request): return templates.TemplateResponse(request, "predict.html", {"page": "predict"})
236232

237233

238234
# --- 新增的现代化页面路由 ---
239235
@app.get("/predict", tags=["Frontend"], response_class=HTMLResponse)
240236
async def serve_predict(request: Request):
241-
return templates.TemplateResponse("predict.html", {"request": request, "page": "predict"})
237+
return templates.TemplateResponse(request, "predict.html", {"page": "predict"})
242238

243239

244240
@app.get("/train", tags=["Frontend"], response_class=HTMLResponse)
245241
async def serve_train(request: Request):
246-
return templates.TemplateResponse("training.html", {"request": request, "page": "training"})
242+
return templates.TemplateResponse(request, "training.html", {"page": "training"})
247243

248244

249245
@app.get("/protection", tags=["Frontend"], response_class=HTMLResponse)
250246
async def serve_protection(request: Request):
251247
"""一键保护页面"""
252-
return templates.TemplateResponse("protection.html", {"request": request, "page": "protection"})
248+
return templates.TemplateResponse(request, "protection.html", {"page": "protection"})
253249

254250

255251
@app.get("/model-select", tags=["Frontend"], response_class=HTMLResponse)
256252
async def serve_model_select(request: Request):
257253
"""模型选择页面"""
258-
return templates.TemplateResponse("model_select.html", {"request": request, "page": "model-select"})
254+
return templates.TemplateResponse(request, "model_select.html", {"page": "model-select"})
259255

260256

261257
@app.get("/tutorial", tags=["Frontend"], response_class=HTMLResponse)
262258
async def serve_tutorial(request: Request):
263-
return templates.TemplateResponse("tutorial.html", {"request": request, "page": "tutorial"})
259+
return templates.TemplateResponse(request, "tutorial.html", {"page": "tutorial"})
264260

265261

266262
@app.get("/explanation", tags=["Frontend"], response_class=HTMLResponse)
267263
async def serve_explanation(request: Request):
268264
"""模型解释页面"""
269-
return templates.TemplateResponse("explanation.html", {"request": request, "page": "explanation"})
265+
return templates.TemplateResponse(request, "explanation.html", {"page": "explanation"})
270266

271267

272268
# --- Pydantic 模型 ---

0 commit comments

Comments
 (0)