为什么不去渲染模板?

时间:2016-01-18 17:30:57

标签: go

我是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>

1 个答案:

答案 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)

}