Improve error message when attempting to paginate from a single page template

Fixes #11953
This commit is contained in:
Bjørn Erik Pedersen 2024-01-31 16:19:52 +01:00
parent 4d98b0ed6a
commit 6c3b6ba3e6
3 changed files with 32 additions and 1 deletions

View file

@ -14,6 +14,8 @@
package hugolib
import (
"fmt"
"github.com/gohugoio/hugo/identity"
"github.com/gohugoio/hugo/output"
"github.com/gohugoio/hugo/resources/page"
@ -37,12 +39,16 @@ func newPageOutput(
targetPathsProvider = ft
linksProvider = ft
var paginatorProvider page.PaginatorProvider = page.NopPage
var paginatorProvider page.PaginatorProvider
var pag *pagePaginator
if render && ps.IsNode() {
pag = newPagePaginator(ps)
paginatorProvider = pag
} else {
paginatorProvider = page.PaginatorNotSupportedFunc(func() error {
return fmt.Errorf("pagination not supported for pages of kind %q", ps.Kind())
})
}
var dependencyManager identity.Manager = identity.NopManager

View file

@ -157,3 +157,16 @@ Len Pag: {{ len $pag.Pages }}
b.AssertFileContent("public/index.html", "Len: 0", "Len Pag: 0")
}
func TestPaginatorNodePagesOnly(t *testing.T) {
files := `
-- hugo.toml --
paginate = 1
-- content/p1.md --
-- layouts/_default/single.html --
Paginator: {{ .Paginator }}
`
b, err := TestE(t, files)
b.Assert(err, qt.IsNotNil)
b.Assert(err.Error(), qt.Contains, `error calling Paginator: pagination not supported for pages of kind "page"`)
}

View file

@ -32,6 +32,18 @@ type PaginatorProvider interface {
Paginate(pages any, options ...any) (*Pager, error)
}
var _ PaginatorProvider = (*PaginatorNotSupportedFunc)(nil)
type PaginatorNotSupportedFunc func() error
func (f PaginatorNotSupportedFunc) Paginate(pages any, options ...any) (*Pager, error) {
return nil, f()
}
func (f PaginatorNotSupportedFunc) Paginator(options ...any) (*Pager, error) {
return nil, f()
}
// Pager represents one of the elements in a paginator.
// The number, starting on 1, represents its place.
type Pager struct {