mirror of
https://github.com/gohugoio/hugo.git
synced 2025-08-17 21:01:26 +02:00
tpl: Fix some baseof lookup issues
We were mistakingly using the templates (e.g. list.html) descriptor to resolve the base template and not the page, which worked fine in most cases, but not all. Fixes #13583
This commit is contained in:
@@ -166,3 +166,31 @@ p3.current.Ancestors.Reverse: {{ with templates.Current }}{{ range .Ancestors.Re
|
||||
"p2.current.Ancestors: _partials/p1.html|all.html",
|
||||
)
|
||||
}
|
||||
|
||||
func TestBaseOfIssue13583(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
files := `
|
||||
-- hugo.toml --
|
||||
-- content/_index.md --
|
||||
---
|
||||
title: "Home"
|
||||
outputs: ["html", "amp"]
|
||||
---
|
||||
title: "Home"
|
||||
-- layouts/baseof.html --
|
||||
layouts/baseof.html
|
||||
{{ block "main" . }}{{ end }}
|
||||
-- layouts/baseof.amp.html --
|
||||
layouts/baseof.amp.html
|
||||
{{ block "main" . }}{{ end }}
|
||||
-- layouts/home.html --
|
||||
{{ define "main" }}
|
||||
Home.
|
||||
{{ end }}
|
||||
|
||||
`
|
||||
b := hugolib.Test(t, files)
|
||||
b.AssertFileContent("public/index.html", "layouts/baseof.html")
|
||||
b.AssertFileContent("public/amp/index.html", "layouts/baseof.amp.html")
|
||||
}
|
||||
|
@@ -301,7 +301,7 @@ func (ti *TemplInfo) String() string {
|
||||
return ti.PathInfo.String()
|
||||
}
|
||||
|
||||
func (ti *TemplInfo) findBestMatchBaseof(s *TemplateStore, k1 string, slashCountK1 int, best *bestMatch) {
|
||||
func (ti *TemplInfo) findBestMatchBaseof(s *TemplateStore, d1 TemplateDescriptor, k1 string, slashCountK1 int, best *bestMatch) {
|
||||
if ti.baseVariants == nil {
|
||||
return
|
||||
}
|
||||
@@ -310,11 +310,11 @@ func (ti *TemplInfo) findBestMatchBaseof(s *TemplateStore, k1 string, slashCount
|
||||
slashCountK2 := strings.Count(k2, "/")
|
||||
distance := slashCountK1 - slashCountK2
|
||||
|
||||
for d, vv := range v {
|
||||
weight := s.dh.compareDescriptors(CategoryBaseof, ti.D, d)
|
||||
for d2, vv := range v {
|
||||
weight := s.dh.compareDescriptors(CategoryBaseof, d1, d2)
|
||||
weight.distance = distance
|
||||
if best.isBetter(weight, vv.Template) {
|
||||
best.updateValues(weight, k2, d, vv.Template)
|
||||
best.updateValues(weight, k2, d2, vv.Template)
|
||||
}
|
||||
}
|
||||
return false, nil
|
||||
@@ -538,7 +538,7 @@ func (s *TemplateStore) LookupPagesLayout(q TemplateQuery) *TemplInfo {
|
||||
return m
|
||||
}
|
||||
best1.reset()
|
||||
m.findBestMatchBaseof(s, key, slashCountKey, best1)
|
||||
m.findBestMatchBaseof(s, q.Desc, key, slashCountKey, best1)
|
||||
if best1.w.w1 <= 0 {
|
||||
return nil
|
||||
}
|
||||
|
Reference in New Issue
Block a user