diff --git a/hugolib/page_output.go b/hugolib/page_output.go index 88e865c97c5..ea23dc2031f 100644 --- a/hugolib/page_output.go +++ b/hugolib/page_output.go @@ -78,13 +78,17 @@ func newPageOutput(p *Page, createCopy bool, f output.Format) (*PageOutput, erro // copy creates a copy of this PageOutput with the lazy sync.Once vars reset // so they will be evaluated again, for word count calculations etc. -func (p *PageOutput) copy() *PageOutput { - c, err := newPageOutput(p.Page, true, p.outputFormat) +func (p *PageOutput) copyWithFormat(f output.Format) (*PageOutput, error) { + c, err := newPageOutput(p.Page, true, f) if err != nil { - panic(err) + return nil, err } c.paginator = p.paginator - return c + return c, nil +} + +func (p *PageOutput) copy() (*PageOutput, error) { + return p.copyWithFormat(p.outputFormat) } func (p *PageOutput) layouts(layouts ...string) ([]string, error) { @@ -142,6 +146,9 @@ func (p *Page) Render(layout ...string) template.HTML { } p.pageOutputInit.Do(func() { + if p.mainPageOutput != nil { + return + } // If Render is called in a range loop, the page output isn't available. // So, create one. outFormat := p.outputFormats[0] diff --git a/hugolib/site_render.go b/hugolib/site_render.go index 17a14bd103a..d5b16975dcb 100644 --- a/hugolib/site_render.go +++ b/hugolib/site_render.go @@ -75,14 +75,10 @@ func pageRenderer(s *Site, pages <-chan *Page, results chan<- error, wg *sync.Wa ) if i == 0 { - page.pageOutputInit.Do(func() { - var po *PageOutput - po, err = newPageOutput(page, false, outFormat) - page.mainPageOutput = po - }) - pageOutput = page.mainPageOutput + pageOutput, err = newPageOutput(page, false, outFormat) + page.mainPageOutput = pageOutput } else { - pageOutput, err = newPageOutput(page, true, outFormat) + pageOutput, err = page.mainPageOutput.copyWithFormat(outFormat) } if err != nil { @@ -159,7 +155,10 @@ func (s *Site) renderPaginator(p *PageOutput) error { continue } - pagerNode := p.copy() + pagerNode, err := p.copy() + if err != nil { + return err + } pagerNode.paginator = pager if pager.TotalPages() > 0 {