はい、可能です。Ahtml.Template
は実際にはテンプレートファイルのセットです。このセットで定義されたブロックを実行すると、このセットで定義された他のすべてのブロックにアクセスできます。
このようなテンプレートセットのマップを自分で作成する場合、基本的にJinja / Djangoが提供するのと同じ柔軟性があります。唯一の違いは、html / templateパッケージはファイルシステムに直接アクセスできないため、テンプレートを自分で解析して作成する必要があることです。
どちらも「base.html」から継承する2つの異なるページ(「index.html」と「other.html」)を持つ次の例について考えてみます。
{{define "base"}}<html>
<head>{{template "head" .}}</head>
<body>{{template "body" .}}</body>
</html>{{end}}
{{define "head"}}<title>index</title>{{end}}
{{define "body"}}index{{end}}
{{define "head"}}<title>other</title>{{end}}
{{define "body"}}other{{end}}
そして、次のテンプレートセットのマップ:
tmpl := make(map[string]*template.Template)
tmpl["index.html"] = template.Must(template.ParseFiles("index.html", "base.html"))
tmpl["other.html"] = template.Must(template.ParseFiles("other.html", "base.html"))
これで、を呼び出すことで「index.html」ページをレンダリングできます。
tmpl["index.html"].Execute("base", data)
呼び出して「other.html」ページをレンダリングできます
tmpl["other.html"].Execute("base", data)
いくつかのトリック(たとえば、テンプレートファイルの一貫した命名規則)を使用すると、tmpl
マップを自動的に生成することも可能です。