【Go】Echoでのテンプレート(html/template)の使い方メモ
はじめに
Echoでテンプレートの使い方を調べたのでメモ。
今回やりたかったことはそんな多くなくて
・URLによってテンプレートを振り分けたい
・ヘッダー等の共通テンプレートを使いまわしたい
実装
まずはメインの処理
server.go
package main import( "net/http" "html/template" "github.com/labstack/echo" ) type Template struct { templates *template.Template } func (t *Template) Render(w io.Writer, name string, data interface{}, c echo.Context) error { return t.templates.ExecuteTemplate(w, name, data) } // サイトで共通情報 type ServiceInfo struct { Title string } var serviceInfo = ServiceInfo { "サイトのタイトル", } func main() { t := &Template{ templates: template.Must(template.ParseGlob("views/*.html")), } e := echo.New() e.Renderer = t e.GET("/page1", func(c echo.Context) error { // テンプレートに渡す値 data := struct { ServiceInfo Content string } { ServiceInfo: serviceInfo, Content: "ページのコンテンツ", } return c.Render(http.StatusOK, "page1", data) }) e.Logger.Fatal(e.Start(":1323")) }
次はテンプレート。
header.htmlが各ページからよばれる共通テンプレート。
defineでテンプレート名をきめる
views/header.html
{{define "header"}} <h1>{{.ServiceInfo.Title}}</h1> {{end}}
page1.htmlからheader.htmlを呼び出してる。
templateでdefineで定義したテンプレートを呼び出す
{{template "header" .}}の1番後ろの「.」で変数を渡している
view/page1.html
{{define "page1"}} {{template "header" .}} <div>{{.Content}}</div> {{end}}
まとまりないけど以上です