弊社ではサーバー側の開発にGo言語、
そのHTMLテンプレートエンジンとしてJet Template Engine for Goを利用しています。
これを利用して「0から1へ」という文字を表示したいとします。
その場合、以下のようなコードが出来上がります。
template/jet/layout/main.jet
<!DOCTYPE html>
<html lang="ja">
<head></head>
<body>
{{yield body()}}
</body>
</html>
template/jet/page/main.jet
{{extends "layout/main.jet"}}
{{block body()}}
<p>0から1へ</p>
{{end}}
main.go
//----前略----//
set := jet.NewHTMLSet("./app/tool/template/jet")
view, err := set.GetTemplate("page/main.jet")
//----エラー関連処理省略----//
err = view.Execute(w, nil, nil)
//----後略----//
これにより、下記のHTMLが生成されます。
<!DOCTYPE html>
<html lang="ja">
<head></head>
<body>
<p>0から1へ</p>
</body>
</html>
この「0から1へ」という本文をプログラムによって変えたい場合、以下のように変更を加えます。
template/jet/page/main.jet
<!----前略---->
<p>{{description}}</p>
<!----後略---->
main.go
//----前略----//
mes := "0から1へ"
vars := make(jet.VarMap)
vars.Set("description", mes)
err = view.Execute(w, vars, nil)
//----後略----//
descriptionに設定する値を変えることで、表示する文を変えられるようになりました。
ここでdescriptionに値を設定しなかった場合、エラーになります。
値が設定されていなくてもデフォルト値を表示したかった場合、どうすればいいでしょうか。
その場合はissetを使いましょう。
template/jet/page/main.jet
<!----前略---->
<p>{{isset(description) ? description: "0から1へ"}}</p>
<!----後略---->
値が設定されている場合はdescription, そうでない場合は「0から1へ」が表示されます。
Go言語らしくない書き方ですが、三項演算子も使えます。
今度は記念日表を作ってみましょう。
template/jet/common/tbody.jet
{{block tbody(contents)}}
<tbody>
{{range contents}}
<tr>
{{range .}}
<td>{{.}}</td>
{{end}}
</tr>
{{end}}
</tbody>
{{end}}
template/jet/common/thead.jet
{{block thead(contents)}}
<thead>
<tr>
{{range contents}}
<th>{{.}}</th>
{{end}}
</tr>
</thead>
{{end}}
template/jet/page/main.jet
<!----前略---->
{{import "common/thead.jet"}}
{{import "common/tbody.jet"}}
{{block body()}}
<table>
{{yield thead(contents=header)}}
{{yield tbody(contents=data)}}
</table>
<!----後略---->
main.go
//----前略----//
vars.Set("header", []string{"日付", "記念日"})
vars.Set("data", [][]string{
{"6月24日", "UFOの日"},
{"7月13日", "オカルト記念日"},
})
//----後略----//
これで記念日表の出来上がり。
main.goのデータを変えるだけで様々な表が作れます。
go言語のstringsパッケージで使える、lower, hasPrefix, replace, splitのような機能、
タグをそのまま使いたい時に便利なエスケープ機能など、
Jet Template Engine for Goにはここで紹介していない便利な機能もいろいろあります。
あなたもJet Template Engine for Goを使ってみませんか?
参考
GitHub – CloudyKit/jet: Jet template engine