diff --git a/beego.go b/beego.go index 60483764..7bcc0740 100644 --- a/beego.go +++ b/beego.go @@ -306,11 +306,13 @@ func initBeforeHttpRun() { } go GlobalSessions.GC() } - - err := BuildTemplate(ViewsPath) - if err != nil { - if RunMode == "dev" { - Warn(err) + + if AutoRender { + err := BuildTemplate(ViewsPath) + if err != nil { + if RunMode == "dev" { + Warn(err) + } } } diff --git a/controller.go b/controller.go index a8b9e8d3..65b311b6 100644 --- a/controller.go +++ b/controller.go @@ -200,8 +200,19 @@ func (c *Controller) RenderBytes() ([]byte, error) { if c.TplNames == "" { c.TplNames = strings.ToLower(c.controllerName) + "/" + strings.ToLower(c.actionName) + "." + c.TplExt } + if RunMode == "dev" { - BuildTemplate(ViewsPath) + buildFiles := make([]string, 1) + buildFiles = append(buildFiles, c.TplNames) + if c.LayoutSections != nil { + for _, sectionTpl := range c.LayoutSections { + if sectionTpl == "" { + continue + } + buildFiles = append(buildFiles, sectionTpl) + } + } + BuildTemplate(ViewsPath, buildFiles...) } newbytes := bytes.NewBufferString("") if _, ok := BeeTemplates[c.TplNames]; !ok { @@ -246,7 +257,7 @@ func (c *Controller) RenderBytes() ([]byte, error) { c.TplNames = strings.ToLower(c.controllerName) + "/" + strings.ToLower(c.actionName) + "." + c.TplExt } if RunMode == "dev" { - BuildTemplate(ViewsPath) + BuildTemplate(ViewsPath, c.TplNames) } ibytes := bytes.NewBufferString("") if _, ok := BeeTemplates[c.TplNames]; !ok { diff --git a/template.go b/template.go index 905f0bef..fdd9dc37 100644 --- a/template.go +++ b/template.go @@ -128,7 +128,7 @@ func AddTemplateExt(ext string) { // build all template files in a directory. // it makes beego can render any template file in view directory. -func BuildTemplate(dir string) error { +func BuildTemplate(dir string, files... string) error { if _, err := os.Stat(dir); err != nil { if os.IsNotExist(err) { return nil @@ -149,11 +149,13 @@ func BuildTemplate(dir string) error { } for _, v := range self.files { for _, file := range v { - t, err := getTemplate(self.root, file, v...) - if err != nil { - Trace("parse template err:", file, err) - } else { - BeeTemplates[file] = t + if (len(files) == 0 || utils.InSlice(file, files)) { + t, err := getTemplate(self.root, file, v...) + if err != nil { + Trace("parse template err:", file, err) + } else { + BeeTemplates[file] = t + } } } } diff --git a/template_test.go b/template_test.go index b35da5ce..79740f2b 100644 --- a/template_test.go +++ b/template_test.go @@ -123,7 +123,7 @@ func TestRelativeTemplate(t *testing.T) { f.Close() } } - if err := BuildTemplate(dir); err != nil { + if err := BuildTemplate(dir, files[1]); err != nil { t.Fatal(err) } if err := BeeTemplates["easyui/rbac/user.tpl"].ExecuteTemplate(os.Stdout, "easyui/rbac/user.tpl", nil); err != nil {