私の以下のコードに基づいて、
私はここにハウツーを作成しました:
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)
}
および 2 番目のページ:
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)
}
必要な数のファイルを追加できるようになりました