Использование шаблонных блоков в сочетании с шаблонными функциями в Golang - PullRequest
0 голосов
/ 04 июня 2018

Я ищу использование шаблонных блоков в 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?Какой изящный и идиоматичный способ выполнить такую ​​задачу?

1 Ответ

0 голосов
/ 05 июня 2018

Используйте следующее, чтобы добавить функции шаблона к тому, что у вас уже работает:

t, err := template.New("base.html").Funcs(sprig.FuncMap()).ParseFiles("./templates/base.html", "./templates/blogpost.html")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...