tpl: Fix layout fall back logic when layout is set in front matter but not found

Fixes #13630
This commit is contained in:
Bjørn Erik Pedersen 2025-04-21 11:28:33 +02:00
parent 1408c156d8
commit 5e62cc6fce
2 changed files with 26 additions and 5 deletions

View file

@ -94,14 +94,10 @@ func (this TemplateDescriptor) doCompare(category Category, isEmbedded bool, oth
}
if other.LayoutFromTemplate != "" && other.LayoutFromTemplate != layoutAll {
if this.LayoutFromUser == "" {
if this.LayoutFromUser == "" || this.LayoutFromUser != other.LayoutFromTemplate {
if other.LayoutFromTemplate != this.LayoutFromTemplate {
return w
}
} else if isLayoutStandard(this.LayoutFromUser) {
if other.LayoutFromTemplate != this.LayoutFromUser {
return w
}
}
}

View file

@ -1245,3 +1245,28 @@ p: {{ partial "p.html" . }}
b.Assert(err, qt.IsNotNil)
b.Assert(err.Error(), qt.Contains, "error calling partial: maximum template call stack size exceeded")
}
func TestIssue13630(t *testing.T) {
t.Parallel()
files := `
-- hugo.toml --
disableKinds = ['rss','sitemap']
-- content/p1.md --
---
title: p1
layout: foo
---
-- layouts/list.html --
layouts/list.html
-- layouts/taxononmy.html.html --
layouts/taxononmy.html.html
`
var b *hugolib.IntegrationTestBuilder
for range 3 {
b = hugolib.Test(t, files)
b.AssertFileExists("public/p1/index.html", false)
}
}