优化模板渲染

This commit is contained in:
ExplodingDragon
2025-04-15 20:11:13 +08:00
parent d71bc43916
commit 1fd4dc4ef0
7 changed files with 36 additions and 26 deletions

View File

@@ -4,11 +4,8 @@ import (
"bytes"
"io"
"net/http"
"text/template"
"code.d7z.net/d7z-project/gitea-pages/pkg/utils"
sprig "github.com/go-task/slim-sprig/v3"
)
type GoTemplate struct{}
@@ -23,7 +20,8 @@ func (g GoTemplate) Render(w http.ResponseWriter, r *http.Request, input io.Read
return err
}
out := &bytes.Buffer{}
parse, err := template.New("tmpl").Funcs(sprig.FuncMap()).Option("missingkey=error").Parse(string(dataB))
parse, err := utils.NewTemplate(string(dataB))
if err != nil {
return err
}

View File

@@ -9,6 +9,8 @@ import (
"strconv"
"time"
"github.com/google/uuid"
"github.com/pkg/errors"
"go.uber.org/zap"
@@ -69,9 +71,11 @@ func NewPageServer(backend core.Backend, options ServerOptions) *Server {
}
func (s *Server) ServeHTTP(writer http.ResponseWriter, request *http.Request) {
sessionId, _ := uuid.NewRandom()
request.Header.Set("Session-ID", sessionId.String())
defer func() {
if e := recover(); e != nil {
zap.L().Error("panic!", zap.Any("error", e))
zap.L().Error("panic!", zap.Any("error", e), zap.Any("id", sessionId))
if err, ok := e.(error); ok {
s.options.DefaultErrorHandler(writer, request, err)
}
@@ -79,7 +83,7 @@ func (s *Server) ServeHTTP(writer http.ResponseWriter, request *http.Request) {
}()
err := s.Serve(writer, request)
if err != nil {
zap.L().Debug("错误请求", zap.Error(err), zap.Any("request", request.RequestURI))
zap.L().Debug("错误请求", zap.Error(err), zap.Any("request", request.RequestURI), zap.Any("id", sessionId))
s.options.DefaultErrorHandler(writer, request, err)
}
}

View File

@@ -27,6 +27,18 @@ func NewTemplateInject(r *http.Request, def map[string]any) map[string]any {
return def
}
func NewTemplate(data string) *template.Template {
return template.Must(template.New("err").Funcs(sprig.FuncMap()).Parse(data))
func MustTemplate(data string) *template.Template {
newTemplate, err := NewTemplate(data)
if err != nil {
panic(err)
}
return newTemplate
}
func NewTemplate(data string) (*template.Template, error) {
funcMap := sprig.FuncMap()
delete(funcMap, "env")
delete(funcMap, "expandenv")
t := template.New("tmpl").Funcs(funcMap)
return t.Parse(data)
}