Я ищу использование шаблонных блоков в Golang, чтобы получить логику перезаписи в стиле «наследование шаблонов».
У меня есть шаблон base.html
, который выглядит примерно так:
<title>{{block "title" .}}Default Title{{end}}</title>
<body>{{block "content" .}}This is the default body.{{end}}</body>
И затем у меня есть шаблон blogpost.html
, например:
{{define "title"}}Blog Post Title{{end}}
{{define "content"}}Lorem Ipsum...{{end}}
Всеэто работает безупречно, пока я просто использую ParseFiles
и затем выполняю шаблон
t, err := template.ParseFiles("./templates/base.html", "./templates/blogpost.html")
t.Execute(t, viewModel)
То, как я это делал, вызывало ParseFiles
один раз для каждого шаблона, который мне нужно было отрендерить.НапримерЯ не вызывал шаблоны по имени.
Однако теперь я хочу также использовать функции шаблона.Теперь мне нужно вызвать template.New
, чтобы получить пустой шаблон, назначить имя, добавить функции шаблона и проанализировать файлы (Funcs
" должен быть вызван до анализа шаблона "):
tpl := template.Must(
template.New("somename").Funcs(sprig.FuncMap()).ParseGlob("*.html")
)
Кажется, это несовместимо с моей идеей наследования шаблонов.Я должен ExecTemplate
с моим base.html
в качестве параметра, чтобы получить какой-либо вывод.Однако я хотел бы загрузить один базовый шаблон и множество шаблонов контента.Затем назовите шаблоны контента по имени.
Неужели я неправильно понимаю способ использования шаблонов и / или блоков Golang?Какой изящный и идиоматичный способ выполнить такую задачу?