在golang中使用template.ParseFiles的多个文件

时间:2012-09-01 02:30:49

标签: go go-templates

例如,我有

package main

import "html/template"
import "net/http"

func handler(w http.ResponseWriter, r *http.Request) {
    t, _ := template.ParseFiles("header.html", "footer.html")
    t.Execute(w, map[string] string {"Title": "My title", "Body": "Hi this is my body"})
}

func main() {
    http.HandleFunc("/", handler)
    http.ListenAndServe(":8080", nil)
}

在header.html中:

Title is {{.Title}}

在footer.html中:

Body is {{.Body}}

转到http://localhost:8080/时,我只看到“标题是我的标题”,而不是第二个文件footer.html。如何使用template.ParseFiles加载多个文件?什么是最有效的方法?

提前致谢。

2 个答案:

答案 0 :(得分:26)

仅将第一个文件用作主模板。其他模板文件需要包含在第一个模板中,如下所示:

Title is {{.Title}}
{{template "footer.html" .}}

"footer.html"将数据从Execute传递到页脚模板后的点 - 在包含的模板中传递的值变为.

答案 1 :(得分:19)

user634175的方法有一点缺点:第一个模板中的{{template "footer.html" .}}必须是硬编码的,这使得很难将footer.html更改为另一个页脚。

这里有一点改进。

header.html中:

Title is {{.Title}}
{{template "footer" .}}

footer.html:

{{define "footer"}}Body is {{.Body}}{{end}}

这样footer.html可以更改为定义“页脚”的任何文件,以制作不同的页面