为了账号安全,请及时绑定邮箱和手机立即绑定

指定已解析模板的名称

指定已解析模板的名称

Go
婷婷同学_ 2021-05-11 09:22:22
我正在尝试使用文件夹中的walk动态解析文件,并且希望能够设置文件“ path / file.html”的路径。但是我的问题是,如果我在“ path / folder / files.html”文件夹中有一个文件,我将无法执行此操作,因为当我使用ExecuteTemplate的文件名将与“ files.html”相同。是否可以将每个模板命名为I ParseFiles?我想一次只做一个文件就可以了,如果一次都做不了的话。// Parse file and send to responsewriterfunc 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)    }}
查看完整描述

2 回答

?
青春有我

TA贡献1784条经验 获得超8个赞

您可以尝试使用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

}


查看完整回答
反对 回复 2021-05-17
  • 2 回答
  • 0 关注
  • 186 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信