我是Go的新手,尝试渲染一个html表单模板interface.html
,它与我的hello.go位于同一目录下。
hello.go
中的相关功能是:
func UserCreateForm(w http.ResponseWriter, r *http.Request) {
var err error
t := template.New("interface") // Create a template.
t, err = t.ParseFiles("interface.html") // Parse template file.
log.Println(t)
t.Execute(w, t)
log.Println("template rendered")
log.Println(err)
}
当我GET
网址时,template rendered
会在终端上登录,但不会呈现模板。
我该如何解决这个问题?
更新
我添加log.Println(t)
。它打印出&{<nil> 0xc8200fa0c0 <nil> 0xc8201060a0}
,而html文件显然在那里而不是空的。
此外,log.Println(err)
还会返回<nil>
答案 0 :(得分:0)
嗯,我意识到导致问题的原因:
定义新模板时,""
中的名称应与ParseFiles
行相同。
所以一个正确的做法:
func UserCreateForm(w http.ResponseWriter, r *http.Request) {
var err error
t := template.New("interface.html") // notice .html is added
t, err = t.ParseFiles("interface.html") // Parse template file.
log.Println(t)
t.Execute(w, t)
log.Println("rendering template")
log.Println(err)
}
更优雅的是,可以将模板放在一行中,例如:
func UserCreateForm(w http.ResponseWriter, r *http.Request) {
t, err := template.ParseFiles("interface.html") // Parse template file.
log.Println(t)
t.Execute(w, t)
log.Println("rendering template")
log.Println(err)
}