How to use go template to parse html files with FuncMap

一世执手 提交于 2020-01-24 12:01:27

问题


I use following code to parse html template. It works well.

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
}

and html template test.html.

<html>
<head>
    <title></title>
</head>
<body>
    <input type="text" value="{{add .A .B}}">
</body>
</html>

But when I move html file to another directory. Then use the following code. The output is always empty.

t := template.New("./templates/test.html").Funcs(template.FuncMap{"add": add})

t, err := t.ParseFiles("./templates/test.html")

Can anyone tell me what's wrong? Or html/template package can not be used like this?


回答1:


What's wrong is that your program (the html/template package) can't find the test.html file. When you specify relative paths (yours are relative), they are resolved to the current working directory.

You have to make sure the html files/templates are in the right place. If you start your app with go run ... for example, relative paths are resolved to the folder you're in, that will be the working directory.

This relative path: "./templates/test.html" will try to parse the file being in the templates subfolder of the current folder. Make sure it's there.

Another option is to use absolute paths.

And also another important note: Do not parse templates in your handler function! That runs to serve each incoming request. Instead parse them in the package init() functions once.

More details on this:

It takes too much time when using "template" package to generate a dynamic web page to client in golang



来源:https://stackoverflow.com/questions/34058772/how-to-use-go-template-to-parse-html-files-with-funcmap

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!