Есть ли способ определить пользовательские действия шаблона 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, который нельзя использовать, если вы не используете его через синтаксический анализатор шаблонов.

Другие вопросы по тегам