如何在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中获取页面资源的完整路径?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Hugo 设置 SCSS

Django REST 框架。如何获取包含协议、域和路径的页面的完整 url?

如何在hugo的页面内容中使用模板参数

如何在 Hugo/Markdown 页面中包含另一个文件?

vue中如何查看api中完整的url

如何在codeigniter中获取上传文件的完整路径?