问题
How can I do in Golang if I have an HTML file like this:
<html>
<head lang="en">
</head>
<body>
<header>{{.Header}}</header>
<div class="panel panel-default">
</div>
</body>
</html>
and I want to embed a part of code into to header tags from an other file like this:
<div id="logo"></div><div id="motto"></div>
My try:
header, _ := template.ParseFiles("header.html")
c := Content{Header: ""}
header.Execute(c.Header, nil)
index := template.Must(template.ParseFiles("index.html"))
index.Execute(w, c)
回答1:
If you parse all your template files with template.ParseFiles() or with template.ParseGlob(), the templates can refer to each other, they can include each other.
Change your index.html
to include the header.html
like this:
<html>
<head lang="en">
</head>
<body>
<header>{{template "header.html"}}</header>
<div class="panel panel-default">
</div>
</body>
</html>
And then the complete program (which parses files from the current directory, executes "index.html"
and writes the result to the standard output):
t, err := template.ParseFiles("index.html", "header.html")
if err != nil {
panic(err)
}
err = t.ExecuteTemplate(os.Stdout, "index.html", nil)
if err != nil {
panic(err)
}
With template.ParseGlob()
it could look like this:
t, err := template.ParseGlob("*.html")
// ...and the rest is the same...
The output (printed on the console):
<html>
<head lang="en">
</head>
<body>
<header><div id="logo"></div><div id="motto"></div></header>
<div class="panel panel-default">
</div>
</body>
</html>
来源:https://stackoverflow.com/questions/33984147/golang-embed-html-from-file