Как вы можете получить полный путь к ресурсу страницы в Ху go? - PullRequest
0 голосов
/ 20 апреля 2020

У меня есть несколько постов в Ху go с ресурсами страницы, которые представляют собой файлы SVG, которые я хочу включить в результирующую HTML. Например, вот типичная структура папок:

content
+-- posts
    +-- somepost
        +-- index.md
        +-- diagram.svg

В сообщении я хотел бы включить содержимое diagram.svg inline как часть полученного HTML. Прочитав другой связанный вопрос , я создал шорткод, который выглядит следующим образом:

{{- readFile (.Get 0) | safeHTML -}}

Однако это означает, что мне нужно указать полный путь к ресурсу SVG, что приводит к моей уценке:

{{< readsvg "content/posts/somepost/diagram.svg" >}}

В идеале, я бы хотел, чтобы шорткод нашел ресурс страницы, чтобы можно было упростить уценку до:

{{< readsvg "diagram.svg" >}}

Если я использую функции ресурса страницы, я могу получить сам ресурс, выполнив: {{ $svg := $.Page.Resources.GetMatch (.Get 0) }}, но получающееся имя файла относительно пакета ресурсов, в то время как readFile нужно, чтобы оно было относительно вершины проекта. Как я могу получить полный путь к ресурсу, чтобы я мог передать его на readFile?

Я пытался использовать absURL, но это не работает, так как у меня есть пользовательские URL-адреса в сообщениях .

Ответы [ 2 ]

0 голосов
/ 24 апреля 2020

Спасибо Руддре за то, что он указал мне правильное направление, полный ответ, который сработал, был:

{{ $svgFile :=  (path.Join (path.Dir .Page.File.Path) (.Get 0)) }}
{{- readFile $svgFile | safeHTML -}}

Если вы хотите больше гибкости в том, как вы указали ресурс в уценке, вы можете добавить ресурс соответствовать этому решению:

{{ $svgRes := .Page.Resources.GetMatch (.Get 0) }}
{{ $svgFile :=  (path.Join (path.Dir .Page.File.Path) $svgRes) }}
{{- readFile $svgFile | safeHTML -}}
0 голосов
/ 23 апреля 2020

Я думаю, что файл SVG должен быть в каталоге static. Но все же, если вы хотите поместить его в тот же каталог, что и файлы уценки, возможно, вы можете использовать .File.Dir в пользовательском шорткоде . Как это:

{{ $svgFile :=  print (.Page.File.Path) (.Get 0) }}
{{- readFile $svgFile | safeHTML -}}
...