我使用以下代码来解析html模板。它运作良好。
func test(w http.ResponseWriter, req *http.Request) { data := struct {A int B int }{A: 2, B: 3} t := template.New("test.html").Funcs(template.FuncMap{"add": add}) t, err := t.ParseFiles("test.html") if err!=nil{ log.Println(err) } t.Execute(w, data) } func add(a, b int) int { return a + b }
和html模板test.html。
<html> <head> <title></title> </head> <body> <input type="text" value="{{add .A .B}}"> </body> </html>
但是当我将html文件移动到另一个目录时。然后使用以下代码。输出始终为空。
t := template.New("./templates/test.html").Funcs(template.FuncMap{"add": add}) t, err := t.ParseFiles("./templates/test.html")
谁能告诉我怎么了?还是无法使用html / template包?
出问题的是您的程序(html/template程序包)找不到test.html文件。当您指定相对路径(您是相对路径)时,它们将解析到当前工作目录。
html/template
test.html
您必须确保html文件/模板在正确的位置。go run ...例如,如果您使用启动应用程序,则相对路径将解析到您所在的文件夹,该文件夹将成为工作目录。
go run ...
此相对路径:"./templates/test.html"将尝试解析templates位于当前文件夹的子文件夹中的文件。确保它在那里。
"./templates/test.html"
templates
另一种选择是使用绝对路径。
还有另一个重要说明: 请勿在处理程序函数中解析模板!可以处理每个传入的请求。而是将它们在包init()函数中解析一次。
init()