英文:
Golang: What's the pre-requisite to use {{ template "partial.html" . }}
问题
import "os"
import "html/template"
...
t, _ := template.ParseFiles("login.html")
t.Execute(os.Stdout, data)
...
login.html:
{{ template "header.html" . }}
<form ....>...</form>
{{ template "footer.html" . }}
没有输出,也没有错误。
如果我删除那两行 {{ template "..." . }}
,我可以看到 <form ...>
部分被输出。
要使 {{ template "..." . }}
正常工作,需要什么条件?或者我完全误解了 html/template 的使用方式?
英文:
import "os"
import "html/template"
...
t, _ := template.ParseFiles("login.html")
t.Execute(os.Stdout, data)
...
login.html:
{{ template "header.html" . }}
<form ....>...</form>
{{ template "footer.html" . }}
no output, no error.
If I remove those two lines of {{ template "..." . }}, I could see the <form ...> part being outputed.
What's required to make {{ template "..." . }} work or am I misunderstanding html/template completely?
答案1
得分: 17
你需要为包含其他模板的文件定义一个名称,然后执行它。
login.tmpl
{{define "login"}}
<!doctype html>
<html lang="en">
..
{{template "header" .}}
</body>
</html>
{{end}}
header.tmpl
{{define "header"}}
无论什么内容
{{end}}
然后解析这两个文件
t := template.Must(template.ParseFiles("login.tmpl", "header.tmpl"))
// 然后使用定义的名称执行模板
t.ExecuteTemplate(os.Stdout, "login", data)
英文:
You need to define a name for the file that will contain the other templates and then execute that.
login.tmpl
{{define "login"}}
<!doctype html>
<html lang="en">
..
{{template "header" .}}
</body>
</html>
{{end}}
header.tmpl
{{define "header"}}
whatever
{{end}}
Then you parse both those files
t := template.Must(template.ParseFiles("login.tmpl", "header.tmpl"))
// and then execute the template with the defined name
t.ExecuteTemplate(os.Stdout, "login", data)
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论