package web import ( "html/template" "net/http" "path/filepath" ) // Renders a full page by combining the base template with a page template // Parsed together so the page can define blocks needed for base template func render(w http.ResponseWriter, _ *http.Request, page string, data any) { files := []string{ filepath.Join("internal", "templates", "layouts", "base.html"), filepath.Join("internal", "templates", "pages", page+".html"), } tmpl, err := template.ParseFiles(files...) if err != nil { http.Error(w, "template error: "+err.Error(), http.StatusInternalServerError) return } w.Header().Set("Content-Type", "text/html") if err := tmpl.ExecuteTemplate(w, "base", data); err != nil { http.Error(w, "render error: "+err.Error(), http.StatusInternalServerError) } } func view(w http.ResponseWriter, r *http.Request, page string, data any) { render(w, r, page, data) }