尝试呈现模板,但出现错误html / template:“ templates / index.html”未定义

时间:2018-07-20 02:08:16

标签: go go-templates

我有一个简单的main.go脚本,该脚本从文件夹加载模板。模板如下:

<html>
<head>
  <title>T2 template</title>
</head>
<body>
 hello
</body>
</html>

main.go脚本的外观为:

package main

import (

  "fmt"
  "html/template"
  "log"
  "net/http"
  "os"

  "github.com/gorilla/mux"
)

var (
  templates = template.Must(template.ParseFiles("templates/index.html"))
)

func main() {

  port := os.Getenv("PORT")

  fmt.Printf("port is: %v\n", port)

  r := mux.NewRouter()

  r.HandleFunc("/hello", HomeHandler)

  log.Fatal(http.ListenAndServe(":"+port, r))
}

func HomeHandler(w http.ResponseWriter, r *http.Request) {
  tmpl := "templates/index.html"

  err := templates.ExecuteTemplate(w, tmpl, "")
  if err != nil {
    http.Error(w, err.Error(), http.StatusInternalServerError)
  }
}

我不确定这是怎么回事。

我在浏览器中看到的错误是:

  

“ templates / index.html”未定义

1 个答案:

答案 0 :(得分:2)

ParseFiles文档说:

  

返回的模板名称将具有第一个文件的(基本)名称和(解析的)内容。

要执行模板,请使用“ templates / index.html”中的base name

tmpl := "index.html"
err := templates.ExecuteTemplate(w, tmpl, "")