From de5be10955f088c2812e66377fb4778aacc7b08a Mon Sep 17 00:00:00 2001 From: visgoods Date: Thu, 25 Oct 2018 12:57:57 +0800 Subject: [PATCH] add part function in html.go MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit layout.html {{ part "css" }} home/index.html {{ define "home/index-css"}} {{ end }} in html/temple the defined block is global variable, so the way of "{{ block "css" }}" in layout and "{{ define "css"}}{{end}}" in home/index.html and home/about.html just one definition work, others will be over coved。 No use!!! This part function like extend the block in layout. Former-commit-id: c3e26a8227808cf2d1dc7121bcffe1a98ce3e678 --- view/html.go | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/view/html.go b/view/html.go index 24bb20ea..2d927ae1 100644 --- a/view/html.go +++ b/view/html.go @@ -44,6 +44,9 @@ var emptyFuncs = template.FuncMap{ "yield": func() (string, error) { return "", fmt.Errorf("yield was called, yet no layout defined") }, + "part": func() (string, error) { + return "", fmt.Errorf("block was called, yet no layout defined") + }, "partial": func() (string, error) { return "", fmt.Errorf("block was called, yet no layout defined") }, @@ -389,6 +392,15 @@ func (s *HTMLEngine) layoutFuncsFor(name string, binding interface{}) { // Return safe HTML here since we are rendering our own template. return template.HTML(buf.String()), err }, + "part": func(partName string) (template.HTML, error) { + nameTemp := strings.Replace(name, ".html", "", -1) + fullPartName := fmt.Sprintf("%s-%s", nameTemp, partName) + buf, err := s.executeTemplateBuf(fullPartName, binding) + if err != nil { + return "", nil + } + return template.HTML(buf.String()), err + }, "current": func() (string, error) { return name, nil },