Golang,模板未定义

时间:2018-09-25 14:20:03

标签: go

我目前正在尝试使用golang创建一个小型Web应用程序,并且正在遵循其网页(https://golang.org/doc/articles/wiki/final.go)上的教程。与其将模板与其余代码放在同一文件夹中,我不打算将它们移至templates/template_name.html

对于模板渲染,我使用以下代码:

var templates = template.Must(template.ParseFiles("templates/edit.html", "templates/view.html"))

func renderTemplate(w http.ResponseWriter, tmpl string, p *Page) {
    err := templates.ExecuteTemplate(w, "templates/"+tmpl+".html", p)
    if err != nil {
            http.Error(w, err.Error(), http.StatusInternalServerError)
    }
}

例如,我的View处理程序如下:

func viewHandler(w http.ResponseWriter, r *http.Request, title string) {                                                                                                                                    
    p, err := loadPage(title)                                                                                                                                                                           
    if err != nil {                                                                                                                                                                                     
            http.Redirect(w, r, "/edit/"+title, http.StatusFound)                                                                                                                                       
            return                                                                                                                                                                                      
    }                                                                                                                                                                                                   
    renderTemplate(w, "view", p)                                                                                                                                                                        

}

我有一个templates/文件夹,其中包含edit.htmlview.html文件。我使用以下代码运行完整代码:go run wiki.go,但是当我尝试访问网页时,出现以下错误:

html/template: "templates/view.html" is undefined

有什么可能的想法吗?

1 个答案:

答案 0 :(得分:0)

就像@Volker 所说的,我们在 ParseFiles 中使用模板的路径,在 ExecuteTemplate 中使用文件名:

var templates = template.Must(template.ParseFiles("templates/edit.html", "templates/view.html"))

func renderTemplate(w http.ResponseWriter, tmpl string, p *Page) {
    err := templates.ExecuteTemplate(w, tmpl+".html", p)
    if err != nil {
            http.Error(w, err.Error(), http.StatusInternalServerError)
    }
}

我的实现:https://github.com/librity/gowiki