Jet Template Engine for GoでHTMLを書く

弊社ではサーバー側の開発に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