golang-template/internal/handlers/templates.go

38 lines
791 B
Go

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
}