Я хочу связать файл с помощью file:///path/to/file
из поста, но ссылка исчезает из-за проверок безопасности:
[my link](file:///path/to/file)
Как я могу разрешить эту ссылку в сообщении?
Этот случай использования не задокументирован:
Решение с использованием шорткодов
Чтобы решить проблему, я создал шорткод назвал file_link.html
:
<a href = "file://{{ .Get 1 | safeURL }}">{{ .Get 0 }}</a>
Таким образом, я могу использовать в теле сообщения:
{{< file_link "this text is shown" "/path/to/file" >}}
Что было бы эквивалентно:
[this text is shown](file:///path/to/file )
Вы можете указать Goldmark (рендереру), как он должен отображать ссылки (см. документы), создав файл в layouts/_default/_markup/render-link.html
. Этот код должен помочь, просто убедитесь, что он отображает все, что он должен отображать в вашем случае (см. упомянутые документы, какие переменные вы можете использовать в файле):
<!-- layouts/_default/_markup/render-link.html -->
<a href = "{{ .Destination | safeURL }}">{{ .Text }}</a>
Обратите внимание, что магия здесь вызвана функцией safeURL
(документация). Если вы хотите использовать функцию safeURL
только тогда, когда URL-адрес начинается с file://
, вы можете сделать что-то вроде этого:
<!-- layouts/_default/_markup/render-link.html -->
{{ if hasPrefix .Destination "file://" }}
<a href = "{{ .Destination | safeURL }}">{{ .Text }}</a>
{{ else }}
<a href = "{{ .Destination }}">{{ .Text }}</a>
{{ end }}
Вы также можете включить рендеринг всех потенциально небезопасных ссылок (а также HTML) везде, обновив файл конфигурации (соответственно настройки рендерера Goldmark), как в примерах ниже. Найдите поле unsafe
в эта часть документов Хьюго.
Вы не должны использовать это, если это не единственное приемлемое решение для вас. Он позволяет отображать URL-адреса, такие как javascript:unsafeFunction()
или теги HTML, что может быть не тем, что вы хотите разрешить.
Синтаксис TOML (config.toml)
[markup]
[markup.goldmark]
[markup.goldmark.renderer]
unsafe = true
Синтаксис YAML (config.yml)
markup:
goldmark:
renderer:
unsafe: true