Justin Pearson

Hugo: Linking to the static directory

I don’t know why this is so difficult. Hugo provides a static directory where you can put stuff that is directly copied to your web directory. In theory you can have links [A link]("/file.pdf") and if you the file static/file.pdf in your Hugo project base directory then all is well.

If your homepage has its root at some other location than the root, say example.com/Hugo rather than just example.com, then this does not always work. I really don’t understand why.

After googling I found this solution that creates a special short code. You use [A link]({{< static "/file.pdf" >}}) blah

You need to create the file layouts/shortcodes/static.md with the following content:

{{- .Scratch.Set "path" (.Get 0) -}}
{{- if hasPrefix (.Scratch.Get "path") "/" -}}
  {{- .Scratch.Set "path" (slicestr (.Scratch.Get "path") 1) -}}
{{- end -}}
{{- .Scratch.Get "path" | absLangURL -}}

It turns out that this rather long winded approach has its advantages. If you put all your papers in static/papers/ then you can create a shortcode layouts/shortcodes/paper.md :

{{- .Scratch.Set "basedir" "papers/" -}}
{{- .Scratch.Set "path" (.Get 0) -}}
{{- if hasPrefix (.Scratch.Get "path") "/" -}}
  {{- .Scratch.Set "path" (slicestr (.Scratch.Get "path") 1) -}}
{{- end -}}
{{- .Scratch.Add "basedir" (.Scratch.Get "path") -}}
{{- .Scratch.Get "basedir" | absLangURL -}}

You can the create links to your papers as :

[This paper]({{< paper "2017_ICTAI.pdf" >}})

Assuming that 2017_ICTAI.pdf is in your papers directory.

Incidental, if you are having trouble showing unexpended short codes in code blocks, then this thread will help.