// parseFiles is the helper for the method and function. If the argument // template is nil, it is created from the first file. func parseBindataFiles(filenames ...string) (*template.Template, error) { var t *template.Template if len(filenames) == 0 { // Not really a problem, but be consistent. return nil, fmt.Errorf("html/template: no files named in call to ParseFiles") } for _, filename := range filenames { b, err := templates.Asset(filename) if err != nil { return nil, err } s := string(b) name := filepath.Base(filename) // First template becomes return value if not already defined, // and we use that one for subsequent New calls to associate // all the templates together. Also, if this file has the same name // as t, this file becomes the contents of t, so // t, err := New(name).Funcs(xxx).ParseFiles(name) // works. Otherwise we create a new template associated with t. var tmpl *template.Template if t == nil { t = template.New(name) } if name == t.Name() { tmpl = t } else { tmpl = t.New(name) } _, err = tmpl.Parse(s) if err != nil { return nil, err } } return t, nil }
// parseFiles is a wrapper similar to template.ParseFiles that is going to // load the templates from the disk, and if they can not be found from the // go-bindata file. func parseFiles(filenames ...string) (*template.Template, error) { tpl := template.New(filenames[0]) for _, filename := range filenames { b, err := ioutil.ReadFile(filename) if err != nil { b, err = assets.Asset(filename) if err != nil { log.Printf("Template: %s not found. Not in HD neihter in bindata!", filename) return nil, err } } tpl.Parse(string(b)) } return tpl, nil }