2016-07-31 6 views
2

Das ist meine Verzeichnisstruktur:Golang: Parsen alle Vorlagen in Verzeichnis und Unterverzeichnissen?

app/ 
    template/ 
    layout/ 
     base.tmpl 
    index.tmpl 

template.ParseGlob("*/*.tmpl") parst index.tmpl aber nicht base.tmpl im layout Unterverzeichnis. Gibt es eine Möglichkeit, alle Vorlagen rekursiv zu analysieren?

+3

Mögliches Duplikat [Kann template.ParseGlob() analysiert Vorlagen in Unterverzeichnissen?] (Http://stackoverflow.com/questions/32309830/can-template-parseglob-parse-templates-in-subdirectories) – icza

+0

@icza Ich stimme dem möglichen Duplikat zu, aber es gibt nicht genau eine Antwort darauf, wie man das umgehen kann, weshalb diese doppelten Fragen auftreten. – Datsik

Antwort

10

Nicht ohne eigene Funktion implementiert, es zu tun, ich habe diese etwas benutze wie

func ParseTemplates() *template.Template { 
    templ := template.New("") 
    err := filepath.Walk("./views", func(path string, info os.FileInfo, err error) error { 
     if strings.Contains(path, ".html") { 
      _, err = templ.ParseFiles(path) 
      if err != nil { 
       log.Println(err) 
      } 
     } 

     return err 
    }) 

    if err != nil { 
     panic(err) 
    } 

    return templ 
} 

Diese alle Ihre Vorlagen werden analysieren, dann können Sie sie machen, indem ihre Namen zu nennen z.B.

template.ExecuteTemplate(w, "home", nil)

+3

Schade, dass so etwas nicht in der Standardbibliothek ist. Gut, dass es nicht schwer umzusetzen ist. – sargas