Ja, es ist möglich. A html.Template
ist eigentlich eine Reihe von Vorlagendateien. Wenn Sie einen definierten Block in diesem Satz ausführen, hat er Zugriff auf alle anderen in diesem Satz definierten Blöcke.
Wenn Sie selbst eine Karte solcher Vorlagensätze erstellen, haben Sie im Grunde die gleiche Flexibilität, die Jinja / Django bietet. Der einzige Unterschied besteht darin, dass das HTML / Template- Paket keinen direkten Zugriff auf das Dateisystem hat. Sie müssen die Vorlagen also selbst analysieren und erstellen.
Betrachten Sie das folgende Beispiel mit zwei verschiedenen Seiten ("index.html" und "other.html"), die beide von "base.html" erben:
// 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}}
Und die folgende Karte der Vorlagensätze:
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"))
Sie können jetzt Ihre "index.html" -Seite durch Aufrufen rendern
tmpl["index.html"].Execute("base", data)
und Sie können Ihre "other.html" -Seite durch Aufrufen rendern
tmpl["other.html"].Execute("base", data)
Mit einigen Tricks (z. B. einer konsistenten Namenskonvention Ihrer Vorlagendateien) ist es sogar möglich, die tmpl
Karte automatisch zu generieren .