英文:
Golang embed html from file
问题
如果你想在 Golang 中处理类似以下的 HTML 文件:
<html>
<head lang="en">
</head>
<body>
<header>{{.Header}}</header>
<div class="panel panel-default">
</div>
</body>
</html>
并且你想要将另一个文件中的一部分代码嵌入到 <header>
标签中,像这样:
<div id="logo"></div><div id="motto"></div>
你可以尝试以下方法:
header, _ := template.ParseFiles("header.html")
c := Content{Header: ""}
header.ExecuteTemplate(c.Header, "header.html", nil)
index := template.Must(template.ParseFiles("index.html"))
index.Execute(w, c)
请注意,上述代码中的 Content
结构体是你自己定义的,用于传递数据给模板。确保在代码中正确定义和使用该结构体。
英文:
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
得分: 13
如果你使用template.ParseFiles()
或者template.ParseGlob()
来解析所有的模板文件,那么这些模板可以相互引用,可以包含彼此。
将你的index.html
文件修改为以下形式,包含header.html
:
<html>
<head lang="en">
</head>
<body>
<header>{{template "header.html"}}</header>
<div class="panel panel-default">
</div>
</body>
</html>
然后完整的程序代码(从当前目录解析文件,执行"index.html"
并将结果写入标准输出)如下:
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)
}
如果使用template.ParseGlob()
,代码如下:
t, err := template.ParseGlob("*.html")
// ...其余部分相同...
输出结果(在控制台打印)如下:
<html>
<head lang="en">
</head>
<body>
<header><div id="logo"></div><div id="motto"></div></header>
<div class="panel panel-default">
</div>
</body>
</html>
英文:
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>
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论