mirror of
https://github.com/infinite-iroha/touka.git
synced 2026-06-13 15:47:38 +08:00
refactor(HTMLBuf): delegate fallback to HTML() method
Reduce code duplication by calling c.HTML() for fallback cases: - When template rendering fails - When HTMLRender is not configured - When HTMLRender is not a *template.Template This ensures consistent behavior between HTMLBuf and HTML methods.
This commit is contained in:
parent
b09595e745
commit
b4e45610b2
1 changed files with 13 additions and 12 deletions
21
context.go
21
context.go
|
|
@ -514,27 +514,28 @@ func (c *Context) HTML(code int, name string, obj any) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// HTMLBuf 先将 HTML 模板渲染到 buffer, 成功后再写入状态码和响应体.
|
// HTMLBuf 先将 HTML 模板渲染到 buffer, 成功后再写入状态码和响应体.
|
||||||
|
// 如果模板渲染失败或不支持缓冲渲染,则回退到标准的 HTML 方法.
|
||||||
func (c *Context) HTMLBuf(code int, name string, obj any) {
|
func (c *Context) HTMLBuf(code int, name string, obj any) {
|
||||||
if c.engine != nil && c.engine.HTMLRender != nil {
|
if c.engine != nil && c.engine.HTMLRender != nil {
|
||||||
if tpl, ok := c.engine.HTMLRender.(*template.Template); ok {
|
if tpl, ok := c.engine.HTMLRender.(*template.Template); ok {
|
||||||
var buf bytes.Buffer
|
var buf bytes.Buffer
|
||||||
err := tpl.ExecuteTemplate(&buf, name, obj)
|
err := tpl.ExecuteTemplate(&buf, name, obj)
|
||||||
if err != nil {
|
if err == nil {
|
||||||
errMsg := fmt.Errorf("failed to render HTML template '%s': %w", name, err)
|
// 渲染成功,写入响应
|
||||||
c.AddError(errMsg)
|
|
||||||
c.ErrorUseHandle(http.StatusInternalServerError, errMsg)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
c.Writer.Header().Set("Content-Type", "text/html; charset=utf-8")
|
c.Writer.Header().Set("Content-Type", "text/html; charset=utf-8")
|
||||||
c.Writer.WriteHeader(code)
|
c.Writer.WriteHeader(code)
|
||||||
c.Writer.Write(buf.Bytes())
|
c.Writer.Write(buf.Bytes())
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
// 渲染失败,记录错误后回退到 HTML()
|
||||||
|
errMsg := fmt.Errorf("failed to render HTML template '%s': %w", name, err)
|
||||||
|
c.AddError(errMsg)
|
||||||
|
c.ErrorUseHandle(http.StatusInternalServerError, errMsg)
|
||||||
|
// 继续执行回退逻辑
|
||||||
}
|
}
|
||||||
// 默认简单输出
|
}
|
||||||
c.Writer.Header().Set("Content-Type", "text/html; charset=utf-8")
|
// 回退到标准 HTML 方法(处理无模板引擎或其他渲染器的情况)
|
||||||
c.Writer.WriteHeader(code)
|
c.HTML(code, name, obj)
|
||||||
c.Writer.Write(fmt.Appendf(nil, "<!-- HTML rendered for %s -->\n<pre>%v</pre>", name, obj))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Redirect 执行 HTTP 重定向
|
// Redirect 执行 HTTP 重定向
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue