Go:提供静态模板

时间:2014-12-11 14:08:06

标签: go

我似乎无法获得提供的静态模板。这是我的代码

转到目录结构

src
     /github.com
          /sam
               /hello
                   auth.go
                   main.go
                   /templates
                       signup.html

auth.go

package main
//...
func homeHandler(w http.ResponseWriter, r *http.Request) {
    renderTemplate(w, "signup", nil)
}

func renderTemplate(w http.ResponseWriter, tmpl string, user *data.User) {
    t := template.Must(template.New("tele").ParseFiles("templates/" + tmpl + ".html"))
    err := t.ExecuteTemplate(w, tmpl, user)
    if err != nil {
        http.Error(w, err.Error(), http.StatusInternalServerError)
    }
}

main.go

package main

func main() {
    //...
    http.Handle("/templates/", http.StripPrefix("/templates/", http.FileServer(http.Dir("templates"))))
    //...
}

signup.html

{{ define "signup" }}
//html code
{{ end }}

go install github.com/sam/auth并打开localhost:3000,但我仍然遇到了恐慌错误:

open templates/signup.html: no such file or directory

WHY ???

1 个答案:

答案 0 :(得分:1)

您使用的路径 - templates/ - 与程序运行的位置有关。无论你在哪里运行程序,如果你想让它工作,你应该使用绝对路径,如$GOPATH/src/github.com/sam/hello/templates/

但这也很脆弱,因为目录可以移动,而你的程序不会在另一台机器上运行。我建议你看一下你的资产(模板)与二进制文件的捆绑。一个好方法是使用go-bindata