英文:
Multiple files using template.ParseFiles in golang
问题
例如.go,我有
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": "我的标题", "Body": "嗨,这是我的正文"})
}
func main() {
http.HandleFunc("/", handler)
http.ListenAndServe(":8080", nil)
}
在header.html中:
标题是{{.Title}}
在footer.html中:
正文是{{.Body}}
当访问http://localhost:8080/
时,我只看到"标题是我的标题",而不是第二个文件footer.html。如何使用template.ParseFiles加载多个文件?最有效的方法是什么?
提前致谢。
英文:
For example.go, I have
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)
}
In header.html:
Title is {{.Title}}
In footer.html:
Body is {{.Body}}
When going to http://localhost:8080/
, I only see "Title is My title", and not the second file, footer.html. How can I load multiple files with template.ParseFiles? What's the most efficient way to do this?
Thanks in advance.
答案1
得分: 31
只有第一个文件被用作主模板。其他模板文件需要从第一个文件中包含,如下所示:
标题是 {{.Title}}
{{template "footer.html" .}}
在"footer.html"
后面的点将数据从Execute
传递到页脚模板 - 传递的值在包含的模板中变为.
。
英文:
Only the first file is used as the main template. The other template files need to be included from the first like so:
Title is {{.Title}}
{{template "footer.html" .}}
The dot after "footer.html"
passes the data from Execute
through to the footer template -- the value passed becomes .
in the included template.
答案2
得分: 23
user634175的方法中有一个小缺点:第一个模板中的{{template "footer.html" .}}
必须是硬编码的,这使得将footer.html更改为另一个页脚变得困难。
这里有一个小改进。
header.html:
标题是{{.Title}}
{{template "footer" .}}
footer.html:
{{define "footer"}}正文是{{.Body}}{{end}}
这样,footer.html可以更改为定义了"footer"的任何文件,以创建不同的页面。
英文:
There is a little shortcoming in user634175's method: the {{template "footer.html" .}}
in the first template must be hard coded, which makes it difficult to change footer.html to another footer.
And here is a little improvement.
header.html:
Title is {{.Title}}
{{template "footer" .}}
footer.html:
{{define "footer"}}Body is {{.Body}}{{end}}
So that footer.html can be changed to any file that defines "footer", to make different pages
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论