猿问

指定已解析模板的名称

我正在尝试使用文件夹中的walk动态解析文件,并且希望能够设置文件“ path / file.html”的路径。但是我的问题是,如果我在“ path / folder / files.html”文件夹中有一个文件,我将无法执行此操作,因为当我使用ExecuteTemplate的文件名将与“ files.html”相同。是否可以将每个模板命名为I ParseFiles?


我想一次只做一个文件就可以了,如果一次都做不了的话。


// Parse file and send to responsewriter

func View(w http.ResponseWriter, path string) {

    temp, err := template.ParseFiles("application/views/"+path+".html")

    if err != nil {

        http.Error(w, err.Error(), http.StatusInternalServerError)

    } else {

        temp.ExecuteTemplate(w, path, nil)

    }

}


婷婷同学_
浏览 187回答 2
2回答

青春有我

您可以尝试使用template.Lookup,整个过程如下所示:var (   templates *template.Template )func loadTemplate() {    funcMap := template.FuncMap{                "safe":func(s string) template.HTML {            return template.HTML(s)        },    }    var err error    templates, err = utils.BuildTemplate("/theme/path/", funcMap)    if err != nil {        log.Printf("Can't read template file %v,", err)    }    }func homeHandler(w http.ResponseWriter, r *http.Request) {          //lookup the theme your want to use    templ = templates.Lookup("theme.html")    err := templ.Execute(w, data)    if err != nil {        log.Println(err)    } } func main() {   loadTemplate() }BuildTemplate看起来像:func BuildTemplate(dir string, funcMap template.FuncMap) (*template.Template, error) {    fs, err := ioutil.ReadDir(dir)    if err != nil {        fmt.Printf("Can't read template folder: %s\n", dir)        return nil, err    }    files := make([]string, len(fs))    for i, f := range (fs) {        files[i] = path.Join(dir, f.Name())    }    return template.Must(template.New("Template").Funcs(funcMap).ParseFiles(files...)), nil}
随时随地看视频慕课网APP

相关分类

Go
我要回答