mirror of
https://github.com/gohugoio/hugo.git
synced 2024-11-21 20:46:30 -05:00
server: Refresh the error template
We cannot cache it forever, as that will not allow the end user to edit and preview it.
This commit is contained in:
parent
87a22eb6d6
commit
657d1a2d95
1 changed files with 24 additions and 5 deletions
|
@ -35,6 +35,8 @@ import (
|
||||||
|
|
||||||
"github.com/gohugoio/hugo/common/htime"
|
"github.com/gohugoio/hugo/common/htime"
|
||||||
"github.com/gohugoio/hugo/common/paths"
|
"github.com/gohugoio/hugo/common/paths"
|
||||||
|
"github.com/gohugoio/hugo/hugolib"
|
||||||
|
"github.com/gohugoio/hugo/tpl"
|
||||||
"golang.org/x/sync/errgroup"
|
"golang.org/x/sync/errgroup"
|
||||||
|
|
||||||
"github.com/gohugoio/hugo/livereload"
|
"github.com/gohugoio/hugo/livereload"
|
||||||
|
@ -522,11 +524,25 @@ func (c *commandeer) serve(s *serverCmd) error {
|
||||||
roots = []string{""}
|
roots = []string{""}
|
||||||
}
|
}
|
||||||
|
|
||||||
templHandler := c.hugo().Tmpl()
|
// Cache it here. The HugoSites object may be unavaialble later on due to intermitent configuration errors.
|
||||||
errTempl, found := templHandler.Lookup("_server/error.html")
|
// To allow the en user to change the error template while the server is running, we use
|
||||||
if !found {
|
// the freshest template we can provide.
|
||||||
panic("template server/error.html not found")
|
var (
|
||||||
|
errTempl tpl.Template
|
||||||
|
templHandler tpl.TemplateHandler
|
||||||
|
)
|
||||||
|
getErrorTemplateAndHandler := func(h *hugolib.HugoSites) (tpl.Template, tpl.TemplateHandler) {
|
||||||
|
if h == nil {
|
||||||
|
return errTempl, templHandler
|
||||||
|
}
|
||||||
|
templHandler := h.Tmpl()
|
||||||
|
errTempl, found := templHandler.Lookup("_server/error.html")
|
||||||
|
if !found {
|
||||||
|
panic("template server/error.html not found")
|
||||||
|
}
|
||||||
|
return errTempl, templHandler
|
||||||
}
|
}
|
||||||
|
errTempl, templHandler = getErrorTemplateAndHandler(c.hugo())
|
||||||
|
|
||||||
srv := &fileServer{
|
srv := &fileServer{
|
||||||
baseURLs: baseURLs,
|
baseURLs: baseURLs,
|
||||||
|
@ -534,8 +550,11 @@ func (c *commandeer) serve(s *serverCmd) error {
|
||||||
c: c,
|
c: c,
|
||||||
s: s,
|
s: s,
|
||||||
errorTemplate: func(ctx any) (io.Reader, error) {
|
errorTemplate: func(ctx any) (io.Reader, error) {
|
||||||
|
// hugoTry does not block, getErrorTemplateAndHandler will fall back
|
||||||
|
// to cached values if nil.
|
||||||
|
templ, handler := getErrorTemplateAndHandler(c.hugoTry())
|
||||||
b := &bytes.Buffer{}
|
b := &bytes.Buffer{}
|
||||||
err := templHandler.Execute(errTempl, b, ctx)
|
err := handler.Execute(templ, b, ctx)
|
||||||
return b, err
|
return b, err
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue