У меня была похожая функция для реализации (только с Хьюго, без JavaScript), и мне пришлось определить Гуго частичный шаблон в моей теме:
В themes/mytheme/layouts/partials/boxtext.html
:
{{ $paragraphs := split .Content "<h2 " }}
{{ range $index, $p := $paragraphs }}
{{ $pp := trim $p " \n" }}
{{ if (eq $index 0) }}
{{ printf "%s\n" $pp | safeHTML }}
{{ end }}
{{ if and (ne $pp "") (gt $index 0) }}
<div class="boxtext">
{{ printf "<h2 %s\n" $pp | safeHTML }}
</div>
{{ end }}
{{end}}
(Это не значит, что вы должны делать то же, что и вы: адаптируйте его к вашему случаю, начиная с split .Content "<h3 "
вместо h2
!)
На самом деле, чтобы быть уверенным, что если не сгенерировать лишнюю строку и остаться компактной, мне пришлось переписать ее следующим образом:
{{ $paragraphs := split .Content "<h2 " }}{{ range $index, $p := $paragraphs }}{{ $pp := trim $p " \n" }}{{ if (eq $index 0) }}{{ printf "%s\n" $pp | safeHTML }}{{ end }}{{ if and (ne $pp "") (gt $index 0) }} <div class="boxtext">
{{ printf "<h2 %s\n" $pp | safeHTML }}
</div>{{ end }}{{end}}
Тогда моя страница шаблона single.html
в соответствующем разделе моего сайта может обернуть HTMLкод, полученный с: {{ partial "boxtext.html" . }}
Как в:
> cat "themes/mytheme/layouts/mysection/single.html"
{{ define "main" }}
<body id="id1">
<div id="top">
<ul class="menu">
</ul>
</div>
<div>
<div id="header">
<h1>{{.Title}}</h1>
</div>
</div>
<div>{{ range .Resources }}{{ if .RelPermalink }}
<li>azza2<a href="{{ .RelPermalink }}">{{ .ResourceType | title }}</a></li>{{ else }}
<li>{{ .ResourceType | title }} (no link, only embedded in page)</li>{{ end }}{{ end }}
</div>
{{ partial "boxtext.html" . }}
</body>