diff options
Diffstat (limited to 'hugolib/site_render.go')
-rw-r--r-- | hugolib/site_render.go | 64 |
1 files changed, 47 insertions, 17 deletions
diff --git a/hugolib/site_render.go b/hugolib/site_render.go index 34f288da2..a55cbb402 100644 --- a/hugolib/site_render.go +++ b/hugolib/site_render.go @@ -19,6 +19,8 @@ import ( "strings" "sync" + "github.com/gohugoio/hugo/tpl" + "github.com/gohugoio/hugo/config" "github.com/gohugoio/hugo/output" @@ -136,33 +138,62 @@ func pageRenderer( continue } - layouts, err := p.getLayouts() + templ, found, err := p.resolveTemplate() if err != nil { - s.Log.ERROR.Printf("Failed to resolve layout for output %q for page %q: %s", f.Name, p, err) + s.SendError(p.errorf(err, "failed to resolve template")) continue } - targetPath := p.targetPaths().TargetFilename - - if targetPath == "" { - s.Log.ERROR.Printf("Failed to create target path for output %q for page %q: %s", f.Name, p, err) + if !found { + s.logMissingLayout("", p.Kind(), f.Name) continue } - if err := s.renderAndWritePage(&s.PathSpec.ProcessingStats.Pages, "page "+p.Title(), targetPath, p, layouts...); err != nil { + targetPath := p.targetPaths().TargetFilename + + if err := s.renderAndWritePage(&s.PathSpec.ProcessingStats.Pages, "page "+p.Title(), targetPath, p, templ); err != nil { results <- err } if p.paginator != nil && p.paginator.current != nil { - if err := s.renderPaginator(p, layouts); err != nil { + if err := s.renderPaginator(p, templ); err != nil { results <- err } } } } +func (s *Site) logMissingLayout(name, kind, outputFormat string) { + log := s.Log.WARN + if name != "" && infoOnMissingLayout[name] { + log = s.Log.INFO + } + + errMsg := "You should create a template file which matches Hugo Layouts Lookup Rules for this combination." + var args []interface{} + msg := "found no layout file for" + if outputFormat != "" { + msg += " %q" + args = append(args, outputFormat) + } + + if kind != "" { + msg += " for kind %q" + args = append(args, kind) + } + + if name != "" { + msg += " for %q" + args = append(args, name) + } + + msg += ": " + errMsg + + log.Printf(msg, args...) +} + // renderPaginator must be run after the owning Page has been rendered. -func (s *Site) renderPaginator(p *pageState, layouts []string) error { +func (s *Site) renderPaginator(p *pageState, templ tpl.Template) error { paginatePath := s.Cfg.GetString("paginatePath") @@ -192,7 +223,7 @@ func (s *Site) renderPaginator(p *pageState, layouts []string) error { if err := s.renderAndWritePage( &s.PathSpec.ProcessingStats.PaginatorPages, p.Title(), - targetPaths.TargetFilename, p, layouts...); err != nil { + targetPaths.TargetFilename, p, templ); err != nil { return err } @@ -220,15 +251,14 @@ func (s *Site) render404() error { return err } - nfLayouts := []string{"404.html"} - + templ := s.lookupLayouts("404.html") targetPath := p.targetPaths().TargetFilename if targetPath == "" { return errors.New("failed to create targetPath for 404 page") } - return s.renderAndWritePage(&s.PathSpec.ProcessingStats.Pages, "404 page", targetPath, p, nfLayouts...) + return s.renderAndWritePage(&s.PathSpec.ProcessingStats.Pages, "404 page", targetPath, p, templ) } func (s *Site) renderSitemap() error { @@ -255,9 +285,9 @@ func (s *Site) renderSitemap() error { return errors.New("failed to create targetPath for sitemap") } - smLayouts := []string{"sitemap.xml", "_default/sitemap.xml", "_internal/_default/sitemap.xml"} + templ := s.lookupLayouts("sitemap.xml", "_default/sitemap.xml", "_internal/_default/sitemap.xml") - return s.renderAndWriteXML(&s.PathSpec.ProcessingStats.Sitemaps, "sitemap", targetPath, p, smLayouts...) + return s.renderAndWriteXML(&s.PathSpec.ProcessingStats.Sitemaps, "sitemap", targetPath, p, templ) } func (s *Site) renderRobotsTXT() error { @@ -282,9 +312,9 @@ func (s *Site) renderRobotsTXT() error { return err } - rLayouts := []string{"robots.txt", "_default/robots.txt", "_internal/_default/robots.txt"} + templ := s.lookupLayouts("robots.txt", "_default/robots.txt", "_internal/_default/robots.txt") - return s.renderAndWritePage(&s.PathSpec.ProcessingStats.Pages, "Robots Txt", p.targetPaths().TargetFilename, p, rLayouts...) + return s.renderAndWritePage(&s.PathSpec.ProcessingStats.Pages, "Robots Txt", p.targetPaths().TargetFilename, p, templ) } |