テンプレートレンダリング
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!