Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Use variable inside Hugo content

I'm trying to use a variable within the content of a Hugo statically generated site. For example, the content looks like the following:

  1. Go to your site's url ({{ .Site.BaseURL }})
  2. Enter your credentials
  3. .....(blah blah blah)

When this gets rendered, the {{ .... }} part doesn't get processed...it stays the same as I put above. I've tried it with a $ in front as well. Variables within templates seem to work just fine. Do I need to create a shortcode to use within content pages?

like image 932
jloosli Avatar asked Oct 27 '15 16:10

jloosli


2 Answers

This is an attempt to slightly improve @minitauros answer with a simplistic example to lookup a (site) parameter sub-key (aka walk the YAML tree, infer an element, etc.).

I would like Hugo to have a JSONPath or jq syntax and, obviously, this example is far from competing with either solutions.

config.yml

params:
  mode: one
  support:
    mailing: [email protected]

layouts/shortcodes/param.html

{{ $v := .Site.Params }}
{{ range (split (.Get 0) ".") }}{{ $v = index $v (.) }}{{ end }}
{{ $v }}

content/_index.md

We are in mode {{< param "mode" >}}.

In case of turbulence, [reach the support](mailto:{{< param "support.mailing" >}}) for help.
like image 199
bufh Avatar answered Oct 12 '22 23:10

bufh


So it looks like a shortcode is the way to do this. For what it's worth, I changed the document to look like the following:

  1. Go to your site's url ({{< siteurl >}})

In layouts/shortcodes, I created the file siteurl.html. It looks like the following:

{{ .Page.Site.BaseURL }}

I needed to add .Page in there to get access to the Site variables. See this Issue Report for more details.

like image 27
jloosli Avatar answered Oct 13 '22 01:10

jloosli