根據我下面的代碼,
我在這裏創造一個HOWTO: http://javatogo.blogspot.com/2013/06/howto-render-multiple-templates-with-go.html
這裏有一個例子如何使多個模板:
const rootPageTemplateHtml = `
<!DOCTYPE html>
<html>
<head>
<title>{{.PageTitle}}</title>
</head>
<body>
{{template "pageMenu" .}}
{{template "pageContent" .}}
{{template "pageFooter" .}}
</body>
</html>
`
const pageMenuTemplateHtml = `
<div>
menu: {{.PageName}}
</div>
`
type PageContent struct {
PageName string
PageContent interface{}
PageTitle string
}
func initTemplate(tmpl *template.Template) {
*tmpl = *template.Must(template.New("rootPage").Parse(rootPageTemplateHtml))
tmpl.New("pageHeader").Parse(``)
tmpl.New("pageMenu").Parse(pageMenuTemplateHtml)
tmpl.New("pageFooter").Parse(``)
}
func execTemplate(tmpl *template.Template, w *http.ResponseWriter, pc *PageContent) {
if err := tmpl.Execute(*w, *pc); err != nil {
http.Error(*w, err.Error(), http.StatusInternalServerError)
}
}
現在讓我們添加的第一頁:
const welcomeTemplateHTML = `
<div>welcome page</div>
`
var welcomePage *template.Template
func initWelcomePageTemplate() {
if nil == welcomePage {
welcomePage = new(template.Template)
initTemplate(welcomePage)
welcomePage.New("pageContent").Parse(welcomeTemplateHTML)
}
}
func renderWelcomePage(w *http.ResponseWriter, pc *PageContent) {
initWelcomePageTemplate()
execTemplate(welcomePage, w, pc)
}
和第二個pag E:
const linksTemplateHTML = `
<div>second page</div>
`
var secondPage *template.Template
func initSecondPageTemplate() {
if nil == secondPage {
secondPage = new(template.Template)
initTemplate(secondPage)
secondPage.New("pageContent").Parse(secondTemplateHTML)
}
}
func renderSecondPage(w *http.ResponseWriter, pc *PageContent) {
initSecondPageTemplate()
execTemplate(secondPage, w, pc)
}
執行此不同的模板,只需添加到您的處理:
func init() {
http.HandleFunc("/", welcome)
http.HandleFunc("/second", second)
}
func welcome(w http.ResponseWriter, r *http.Request) {
pc := PageContent{"/", nil, "Welcome Page Title"}
renderWelcomePage(&w, &pc)
}
func second(w http.ResponseWriter, r *http.Request) {
pc := PageContent{"/second", nil, "Second Page Title"}
renderSecondPage(&w, &pc)
}
現在,只要你想
@ fmt.Println.MKO您可以添加儘可能多的文件:是的,我試過這個例子之前...但如果我渲染下面,那麼它是與HTML標記呈現。我不想要。例如:{{界定 「身體」}}
喜
{{結束}} –啥子意思與它的渲染與HTML?你的輸入是什麼,你的輸出是什麼,你期望什麼? –
包主 進口( \t 「的HTML /模板」 \t \t 「淨/ HTTP」 ) FUNC處理器(瓦特http.ResponseWriter,R * http.Request){\t S1,_:=模板。 ParseFiles(「templates/t1.html」,「templates/t2.html」,「templates/t3.html」)0121.s1.ExecuteTemplate(w,「t_cd」,nil) s1.ExecuteTemplate(w,「body」, nil) } func init(){ http.HandleFunc(「/」,handler) \t } OutPut:c d
hi
「在輸出html標記即將到來,我不想顯示」。 –