Better handle missing layouts
authorNoah Campbell <noahcampbell@gmail.com>
Wed, 2 Oct 2013 15:05:57 +0000 (11:05 -0400)
committerNoah Campbell <noahcampbell@gmail.com>
Tue, 8 Oct 2013 16:42:02 +0000 (18:42 +0200)
Panic is too extreme.  Instead the library will write out a message in
verbose mode.

hugolib/site.go

index b83ae3aab666db03000cb95656c464ea5c3487a4..dd069a28a9161d48e89cc581109af626eccd2648 100644 (file)
@@ -401,7 +401,7 @@ func (s *Site) RenderIndexes() error {
 
                        var base string
                        base = plural + "/" + k
-                       err := s.render(n, base+".html", layout, "_default/indexes.html")
+                       err := s.render(n, base+".html", layout)
                        if err != nil {
                                return err
                        }
@@ -454,7 +454,7 @@ func (s *Site) RenderLists() error {
                n.Data["Pages"] = data
                layout := "indexes/" + section + ".html"
 
-               err := s.render(n, section, layout, "_default/index.html")
+               err := s.render(n, section, layout, "_default/indexes.html")
                if err != nil {
                        return err
                }
@@ -542,6 +542,12 @@ func (s *Site) render(d interface{}, out string, layouts ...string) (err error)
        reader, writer := io.Pipe()
 
        layout := s.findFirstLayout(layouts...)
+       if layout == "" {
+               if s.Config.Verbose {
+                       fmt.Printf("Unable to locate layout: %s\n", layouts)
+               }
+               return
+       }
        go func() {
                err = s.renderThing(d, layout, writer)
                if err != nil {
@@ -552,13 +558,13 @@ func (s *Site) render(d interface{}, out string, layouts ...string) (err error)
        return s.WritePublic(out, reader)
 }
 
-func (s *Site) findFirstLayout(layouts ...string) string {
-       for _, layout := range layouts {
+func (s *Site) findFirstLayout(layouts ...string) (layout string) {
+       for _, layout = range layouts {
                if s.Tmpl.Lookup(layout) != nil {
-                       return layout
+                       return
                }
        }
-       panic("Unable to find layout.")
+       return ""
 }
 
 func (s *Site) renderThing(d interface{}, layout string, w io.WriteCloser) error {