Sì, è possibile. A html.Template
è in realtà un insieme di file modello. Se si esegue un blocco definito in questo set, ha accesso a tutti gli altri blocchi definiti in questo set.
Se crei una mappa di tali set di modelli da solo, hai fondamentalmente la stessa flessibilità offerta da Jinja / Django. L'unica differenza è che il pacchetto html / template non ha accesso diretto al file system, quindi devi analizzare e comporre i modelli da solo.
Considera il seguente esempio con due pagine diverse ("index.html" e "other.html") che ereditano entrambe da "base.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}}
E la seguente mappa di set di modelli:
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"))
Ora puoi eseguire il rendering della tua pagina "index.html" chiamando
tmpl["index.html"].Execute("base", data)
e puoi visualizzare la tua pagina "altro.html" chiamando
tmpl["other.html"].Execute("base", data)
Con alcuni accorgimenti (ad es. Una convenzione di denominazione coerente dei file modello), è persino possibile generare tmpl
automaticamente la mappa.