Да възможно е. html.Template
всъщност е набор от шаблонни файлове. Ако изпълните дефиниран блок в този набор, той има достъп до всички останали блокове, дефинирани в този набор.
Ако създадете карта на такива набори шаблони сами, имате основно същата гъвкавост, която предлага Jinja / Django. Единствената разлика е, че пакетът html/template няма директен достъп до файловата система, така че трябва да анализирате и композирате шаблоните сами.
Разгледайте следния пример с две различни страници ("index.html" и "other.html"), които и двете наследяват от "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}}
И следната карта на наборите от шаблони:
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
картата.
person
tux21b
schedule
13.07.2012