golang中没有这样的文件或目录错误

时间:2016-07-07 06:27:50

标签: go

我想在我的一个golang控制器中指定一个html模板 我的目录结构是这样的

 Project
 -com
  -src
   - controller
     -contoller.go
 -view
  - html
   -first.html

我想加载first.html for request / new。我已经将NewHandler用于url / new,而NewHandler func正在执行/ new请求并且在controller.go中。这是我的代码

func NewHandler(w http.ResponseWriter, r *http.Request) {
    t, err := template.ParseFiles("view/html/first.html")
    if err == nil {
        log.Println("Template parsed successfully....")
    }
 err := templates.ExecuteTemplate(w, "view/html/first.html", nil)
if err != nil {
    log.Println("Not Found template")
}
//  t.Execute(w, "")
}

但我收到错误

     panic: open first.html: no such file or directory

请帮我删除此错误。提前致谢

3 个答案:

答案 0 :(得分:4)

我通过给出html的绝对路径解决了这个问题。为此,我创建了一个解析html的类

package htmltemplates

import (
"html/template"
"path/filepath"
)

在NewHandler方法中,我删除了      //模板用于存储所有模板     var Templates * template.Template

func init() {
filePrefix, _ := filepath.Abs("./work/src/Project/view/html/")       // path from the working directory
Templates = template.Must(template.ParseFiles(filePrefix + "/first.html")) 
...
//htmls must be specified here to parse it
}

在NewHandler中,我删除了前5行,而是给了

err := htmltemplates.Templates.ExecuteTemplate(w, "first.html", nil)

它现在正在工作。但是如果有的话需要更好的解决方案

答案 1 :(得分:1)

您是否已在主要功能中包含此行?

http.Handle("/view/", http.StripPrefix("/view/", http.FileServer(http.Dir("view"))))

view是必须在FileServer函数中指定以允许读/写的目录的名称。(视图目录必须保存在二进制文件所在的同一目录中)

答案 2 :(得分:0)

更好的解决方案是给出绝对路径名称,即代替此“ view / html / first.html”,试试

 func NewHandler(w http.ResponseWriter, r *http.Request) {
        t, err := template.ParseFiles("./work/src/Project/view/html/first.html")
        if err == nil {
            log.Println("Template parsed successfully....")
        }
     err := templates.ExecuteTemplate(w, "view/html/first.html", nil)
    if err != nil {
        log.Println("Not Found template")
    }
    //  t.Execute(w, "")
    }