Есть ли способ определить пользовательские действия шаблона Go
Есть ли способ определить пользовательские «Действия» (например, диапазон, если, блок и т. Д.) С помощью текстовых или html-шаблонов go. Я бы хотел добиться примерно следующего:
{{ component "blog_post" . }}
{{ template "title" . }}
{{ component "content" . }}
My Content
{{ end }}
{{ end }}
Где «компонент» - это мое настраиваемое действие.
Я добился вышеупомянутого функционально, используя пользовательские функции, но это довольно неуклюже и трудно читать. Меня особенно интересует возможность использовать настраиваемое действие, которое принимает как обычный аргумент (например,
.
), а также произвольные «потомки» (очень похожие на компонент React).
1 ответ
Это невозможно в текущей реализации шаблонов Go.
Действия обрабатываются внутренним
text/template/parse
пакет, и все они определены в https://golang.org/src/text/template/parse/node.go. Вы обнаружите, что не существует механизма для создания новых действий, поскольку
Tree.action
метод в
parse.go
имеет для них жестко запрограммированный корпус переключателя.
Это печально, потому что
text/template
В пакете много упущенных возможностей для многоразового использования. Например, есть целый встроенный анализатор LISP, который нельзя использовать, если вы не используете его через синтаксический анализатор шаблонов.