テンプレートレンダリング

Irisには組み込みの8つのテンプレートエンジンのサポートがあり、開発者はContext.ResponseWriter()io.Writerであるため、任意の外部Go言語テンプレートエンジンを使用することができます。

すべてのテンプレートエンジンは、埋め込みリソースを使用したパース、レイアウトおよびParty固有のレイアウト、テンプレート関数、および部分的なレンダリングを含む共通のAPIを共有しています。

# 名前 パーサー
1 HTML html/template
2 Blocks kataras/blocks
3 Django flosch/pongo2
4 Pug Joker/jade
5 Handlebars aymerick/raymond
6 Amber eknkc/amber
7 Jet CloudyKit/jet
8 Ace yosssi/ace

各Partyに対してビューエンジンを登録することができます。以下に示すように、Application/Party.RegisterView(ViewEngine)メソッドを使用して登録します。

"./views"フォルダから".html"拡張子を持つすべてのテンプレートを読み込み、標準のhtml/templateパッケージを使用してパースします。

// [app := iris.New...]
tmpl := iris.HTML("./views", ".html")
app.RegisterView(tmpl)

メインのルートハンドラーでは、Context.Viewメソッドを使用してビューをレンダリングまたは実行します。

if err := ctx.View("hi.html"); err != nil {
    ctx.HTML("%s", err.Error())
    return
}

ミドルウェアまたはメインハンドラーでContext.ViewDataメソッドを使用して、ビュー内のキーバリューパターンにGoの値をバインドします。

{{.message}}"Hello world!"でバインドします。

ctx.ViewData("message", "Hello world!")

ルートのバインディング:

if err := ctx.View("user-page.html", User{}); err != nil {
    ctx.HTML("%s", err.Error())
    return
}

// ルートバインディングとして {{.Name}}

好みのビューエンジンAddFuncメソッドを使用してテンプレート関数を追加します。

//       関数名, 入力パラメータ, 返り値
tmpl.AddFunc("greet", func(s string) string {
    return "Greetings " + s + "!"
})

各リクエストでリロードしたい場合は、ビューエンジンのReloadメソッドを呼び出します。

tmpl.Reload(true)

ローカルファイルシステムに依存せずに埋め込まれたテンプレートを使用したい場合は、外部ツールgo-bindataを使用し、AssetFile()関数を好みのビューエンジンの最初の入力パラメータとして渡します。

tmpl := iris.HTML(AssetFile(), ".html")

サンプルコード:

// File: main.go
package main

import "github.com/kataras/iris/v12"

func main() {
    app := iris.New()

    // "./views" フォルダから拡張子が ".html" のすべてのテンプレートを解析します
    // パースには標準の `html/template` パッケージを使用します
    tmpl := iris.HTML("./views", ".html")
    // カスタムの区切り文字を設定します
    tmpl.Delims("{{", "}}")
    // ローカルのテンプレートファイルの変更の再コンパイルを有効にする
    tmpl.Reload(true)
    
    // デフォルトのテンプレート関数には以下が含まれます:
    //
    // - {{ urlpath "myNamedRoute" "pathParameter_ifNeeded" }}
    // - {{ render "header.html" . }}
    // 現在のページへの相対パス:
    // - {{ render_r "header.html" . }} 
    // - {{ yield . }}
    // - {{ current }}
    // カスタムのテンプレート関数を登録します:
    tmpl.AddFunc("greet", func(s string) string {
        return "Greetings " + s + "!"
    })
    
    // ビューエンジンをアプリケーションに登録します
    // これによりテンプレートが読み込まれます
    app.RegisterView(tmpl)
    
    // メソッド: GET
    // リソース: http://localhost:8080
    app.Get("/", func(ctx iris.Context) {
        // {{.message}} を "Hello world!" にバインドします
        ctx.ViewData("message", "Hello world!")
        // テンプレートファイルをレンダリングします: ./views/hi.html
        if err := ctx.View("hi.html"); err != nil {
            ctx.HTML("%s", err.Error())
            return
        }
    })
    
    app.Listen(":8080")
}
Hi Page


{{.message}}
{{greet "to you"}}

新しいタブを開き、http://localhost:8080 を訪れてください。

レンダリングされた結果 は以下のようになります:

    Hi Page


    Hello world!
    こんにちは to you!