【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}}まとまりないけど以上です