如何在Hugo中获取页面资源的完整路径?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Hugo中获取页面资源的完整路径?相关的知识,希望对你有一定的参考价值。
我在Hugo中有一些帖子,其中包含页面资源,这些页面资源是SVG文件,我想在结果html中包括内联。例如,这是一个典型的文件夹结构:
content
+-- posts
+-- somepost
+-- index.md
+-- diagram.svg
在帖子中,我想将内嵌diagram.svg
的内容作为结果HTML的一部分。通读another related question,我创建了一个简码来做到这一点,如下所示:
- readFile (.Get 0) | safeHTML -
但是,这意味着我需要提供SVG资源的完整路径,这会在我的markdown中导致此结果:
< readsvg "content/posts/somepost/diagram.svg" >
理想情况下,我希望简码找到页面资源,以便将降价简化为:
< readsvg "diagram.svg" >
如果使用页面资源功能,则可以通过以下方式获取资源本身: $svg := $.Page.Resources.GetMatch (.Get 0)
,但是生成的文件名是相对于资源束的,而readFile
则需要它相对于项目的顶部。如何获取资源的完整路径,以便可以将其传递给readFile
?
我尝试使用absURL
来执行此操作,但这不起作用,因为我在帖子上有自定义URL。
答案
我认为svg文件应位于static
目录中。但是,即使要将其与降价文件放在同一目录中,也可以在自定义shortcode中使用.File.Dir
。像这样:
.File.Dir
另一答案
感谢ruddra向我指出正确的方向,有效的完整答案是:
$svgFile := print (.Page.File.Path) (.Get 0)
- readFile $svgFile | safeHTML -
如果要在减价中指定资源方面更具灵活性,可以向该解决方案添加资源匹配项:
$svgFile := (path.Join (path.Dir .Page.File.Path) (.Get 0))
- readFile $svgFile | safeHTML -
以上是关于如何在Hugo中获取页面资源的完整路径?的主要内容,如果未能解决你的问题,请参考以下文章