hugo图片引入问题

我在使用hugo写笔记的时候遇到了插入图片出现链接失效问题,因为在hugo中 xxx.md 生成html后会生成 xxx 目录,然后再 xxx 目录下生成 index.html ,因此编写md时的图片引用路径在生成html后边的不可用了;

网上查到的解决方法有两种:

  1. 图片放入 /static 目录下,然后通过绝对路径引入
  2. 将 xxx.md 调整为 xxx/index.md 然后使用相对路径引用图片

但是:方法一需要把所有图片放到 /static 下,需要单独维护;方法二会导致出现大量目录和 index.md 文件,目录就会非常乱。

故而想了一种办法:通过修改md生成html时图片渲染处理逻辑,以支持相对路径图片引用

修改 render_image.html (/layouts/_default/_markup/render_image.html)

默认可能没有,我的是从 PaperMod 主题里复制的

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
{{- $u := urls.Parse .Destination -}}
{{- $src := $u.String -}}
{{- if not $u.IsAbs -}}
  {{- $path := strings.TrimPrefix "./" $u.Path }}
  {{- with or (.PageInner.Resources.Get $path) (resources.Get $path) -}}
    {{- $src = .RelPermalink -}}
    {{- with $u.RawQuery -}}
      {{- $src = printf "%s?%s" $src . -}}
    {{- end -}}
    {{- with $u.Fragment -}}
      {{- $src = printf "%s#%s" $src . -}}
    {{- end -}}
  {{/* 新增逻辑:非 index.md 的本地相对路径添加 ../ */}}
  {{- else -}}
    {{- if and (not (hasPrefix $u.Path "/")) (ne .PageInner.File.LogicalName "index.md") -}}
      {{- $src = printf "../%s" $path -}}
    {{- end -}}
  {{- end -}}
  {{- 一直到这里 -}}
{{- end -}}
{{- $attributes := merge .Attributes (dict "alt" .Text "src" $src "title" (.Title | transform.HTMLEscape) "loading" "lazy") -}}
<img
  {{- range $k, $v := $attributes -}}
    {{- if $v -}}
      {{- printf " %s=%q" $k $v | safeHTMLAttr -}}
    {{- end -}}
  {{- end -}}>
{{- /**/ -}}

这样你就可以直接在 xxx.md 中直接使用 img/xxx_1.1.png 引入图片了