golangのechoのhtml/templateを使ってみる
golangでhtml/templateを使用したHTML表示を作成したので、理解したことを整理するために書いてみます。
フレームワークとしてechoを使用しています。
テンプレートファイル
読み込みを行うファイルを指定するので、ファイルの拡張子に決まりはないです。
「tpl」や「html」で大丈夫です。
ファイルリストの読み込み指定
list, err := template.New("t").ParseGlob("template/*.tpl") t := &Template{ templates: template.Must(list, err), }
Template構造体の宣言
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) }
echo にテンプレート情報を設定
e := echo.New() e.Renderer = t
goのソースから呼び出す際にがRendar関数で呼び出します。第二引数でテンプレートを指定し、第三引数で使用するパラメータを渡します。構造体も使用できます。
func Hello(c echo.Context) error { return c.Render(http.StatusOK, "xxx", "aaa") }
テンプレートファイルにはdefineとend構文でそれぞれ定義をしていきます。
{{define "xxx" }} <html> <head></head> <body>{{.}}</body> </html> {{end}}
表示だけならこれでできます。
テンプレートフォルダを分ける
規模が大きくなるとファイル数が増えていき、可読性が下がるので、ディレクトリを複数指定できるようにしました。
探してみましたが、ディレクトリの指定が一つの場合が多く、複数指定の記事がなかったですね。
テンプレートファイルからテンプレートを呼び出す場合には、template文を使用します。引数を指定することが可能です。
{{define "name"}} {{.}}さん {{end}} {{template "name" .Name}}
関数呼び出し
定義を作成し、templateに設定しておきます。
funcMap := template.FuncMap{ "name" : func(v string) string { return v + "さん" }, "nl2br": func(text string) template.HTML { return template.HTML(strings.Replace(template.HTMLEscapeString(text), "\n", "<br />", -1)) }, } list, err := template.New("t").Funcs(funcMap).ParseGlob("template/*.tpl")
テンプレートファイルからは、設定した関数名を呼び出すだけです。
{{nl2br .Memo}}
注意事項として、関数名を間違えると面倒でした。
Golandでのgoテンプレート補完
JetBrainsのGolandで開発を行なっていますが、templateのコード補完で調べても出てこないので、書いておきます。
以前一度見つけてから、再度見つけるのに時間がかかってしまったので、メモです。
参考
html/templateで困った際に参考にさせてもらったサイト
マニュアル
かなり理解できるようになりました。

- 作者: Mat Ryer,鵜飼文敏,牧野聡
- 出版社/メーカー: オライリージャパン
- 発売日: 2016/01/22
- メディア: 大型本
- この商品を含むブログ (3件) を見る