Oui c'est possible. Un html.Template
est en fait un ensemble de fichiers de modèle. Si vous exécutez un bloc définie dans cet ensemble, il a accès à tous les autres blocs définis dans cet ensemble.
Si vous créez une carte de tels ensembles de template sur votre propre, vous avez essentiellement de la même souplesse que Jinja / Django offre. La seule différence, c'est que le html/modèle paquet a pas d'accès direct au système de fichiers, de sorte que vous avez à analyser et à composer des modèles sur votre propre.
Prenons l'exemple suivant, deux pages différentes ("index.html" et "other.html") que les deux d'hériter de base.html":
// Content of base.html:
{{define "base"}}<html>
<head>{{template "head" .}}</head>
<body>{{template "body" .}}</body>
</html>{{end}}
// Content of index.html:
{{define "head"}}<title>index</title>{{end}}
{{define "body"}}index{{end}}
// Content of other.html:
{{define "head"}}<title>other</title>{{end}}
{{define "body"}}other{{end}}
Et la carte des ensembles de template:
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"))
Vous pouvez maintenant rendre votre "index.html" page en appelant tmpl["index.html"].Execute("base", data)
et vous pouvez rendre votre "other.html" page en appelant tmpl["other.html"].Execute("base", data)
. Avec quelques astuces (par exemple, un uniforme convention de nommage de vos fichiers de modèle), il est même possible de générer de l' tmpl
carte automatiquement.