package handlers import ( "html/template" "path/filepath" ) // NewTemplateCache parses every page template once, each paired with the // shared layout, and returns them keyed by page filename (e.g. "index.tmpl"). // Handlers look up the pre-parsed template instead of re-parsing files on // every request. func NewTemplateCache() (map[string]*template.Template, error) { cache := map[string]*template.Template{} pages, err := filepath.Glob("./ui/html/pages/*.tmpl") if err != nil { return nil, err } for _, page := range pages { name := filepath.Base(page) files := []string{ "./ui/html/base.tmpl", "./ui/html/navbar.tmpl", page, } ts, err := template.ParseFiles(files...) if err != nil { return nil, err } cache[name] = ts } return cache, nil }