我刚开始学习Go语言,并想用它创建一个Web应用程序。我现在正在尝试以handlebarsjs方式使用模板。我想将页眉和页脚从我的主页中分离出来,以便可以在每个网页上注入它们。
我的当前设置应该解析主页、页眉和页脚HTML文件并对其进行缓存。然后我执行my home.html模板,该模板具有页面标题、header.html文件和footer.html文件的字段。
每当我搜索类似页面时,我只看到JavaScript页面,所以如果这是一个转帖,请告诉我在哪里查找。
编辑: 我已更新我的代码,采纳了@Minty和@putu的建议。我正在尝试读取html文件并将其存储在数据映射中,同时向我的模板添加模板定义。现在有一些新的错误需要解决,因此该站点目前无法呈现。但是,如果您能提供任何新的建议,那将非常有帮助。
server.go
我的当前设置应该解析主页、页眉和页脚HTML文件并对其进行缓存。然后我执行my home.html模板,该模板具有页面标题、header.html文件和footer.html文件的字段。
每当我搜索类似页面时,我只看到JavaScript页面,所以如果这是一个转帖,请告诉我在哪里查找。
编辑: 我已更新我的代码,采纳了@Minty和@putu的建议。我正在尝试读取html文件并将其存储在数据映射中,同时向我的模板添加模板定义。现在有一些新的错误需要解决,因此该站点目前无法呈现。但是,如果您能提供任何新的建议,那将非常有帮助。
server.go
package main
import (
"html/template"
"io/ioutil"
"net/http"
"regexp"
)
var tPath = "./temps/"
var dPath = "./data/"
var templates = template.Must(template.ParseFiles(tPath+"home.html", dPath+"header.html", dPath+"footer.html"))
var validPath = regexp.MustCompile("^/")
func rootHandler(wr http.ResponseWriter, req *http.Request) {
title := "home"
headerFile, headErr := ioutil.ReadFile(dPath + "header.html")
footerFile, footErr := ioutil.ReadFile(dPath + "footer.html")
if headErr != nil || footErr != nil {
http.Error(wr, headErr.Error(), http.StatusInternalServerError)
http.Error(wr, footErr.Error(), http.StatusInternalServerError)
}
data := map[string]interface{}{
"Title": title,
"Header": string(headerFile),
"Footer": string(footerFile),
}
err := templates.ExecuteTemplate(wr, title+".html", data)
if err != nil {
http.Error(wr, err.Error(), http.StatusInternalServerError)
}
}
func main() {
http.HandleFunc("/", rootHandler)
http.ListenAndServe(":8080", nil)
}
home.html:
{{define "homeHTML"}}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>{{.Title}} - MySite</title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
{{.Header}}
<h1>Welcome!</h1>
{{.Footer}}
</body>
</html>
{{end}}
Header.html:
{{define "headerHTML"}}
<header>
<h1>MySite</h1>
<br>
<nav>
<a href="/">Home</a>
</nav>
</header>
{{end}}
Footer.html
{{define "footerHTML"}}
<footer>
<p>Thank You for Visiting</p>
</footer>
{{end}}