Continuing the discussion from Disable specific content types:
I am curious to know the cases where front-matter params can be read back in non-lowercase form e.g. .Params.camelCase
.
Continuing the discussion from Disable specific content types:
I am curious to know the cases where front-matter params can be read back in non-lowercase form e.g. .Params.camelCase
.
I often use camelCasing for front matter params, but .Params.camelcase
will work just as .Params.camelCase
.
My initial thought was that Hugo lowercase whatever .Params’s key is used in the template before fetching its value.
Just to clarify, if the front-matter has camelCase
, I can access it as .Params.camelcase
, but not as .Params.camelCase
. I just tested that for this case.
Are you saying the latter works for you? Do you have a sample I can look at to understand?
Also, what I said is very evident when using the debugprint partial… All camelCase front-matter keys show up in all-lowercase in the debugprint output.
Update: This is confusing… I can now refer a camelCase
param as .Params.camelCase
is another test…
OK, I finally have a test case… with a crazy conclusion.
If we do:
{{ with $page_handle }}
{{ .Params.camelCase }}
{{ end }}
it works, interestingly even .Params.camelcase
and .Params.CamelCase
work (looks like the param can be fetched case-insensitively), but …
If we try to do:
{{ $page_handle.Params.camelCase }}
it does not work!.. only {{ $page_handle.Params.camelcase }}
will work (note that here that param key is in all lower case).
So it further strengthens my rule-of-thumb: Always have the front-matter keys in all-lowercase.
You are right about the lower-case recommendation. It may be sensible to stick with “my_param” format… But
The thing is, we got lots of questions/issues related to this at some point, so I wrote an AST template transformer … To lower case
- },
- },
- "Data": map[string]interface{}{
- "Params": map[string]interface{}{
- "NOLOW": "P3H",
- },
- },
- },
- }
-
- paramsTempl = `
- {{ $page := . }}
- {{ $pageParams := .Params }}
- {{ $site := .Site }}
- {{ $siteParams := .Site.Params }}
- {{ $data := .Site.Data }}
- {{ $notparam := .NotParam }}
-
- P1: {{ .Params.LOWER }}
- P1_2: {{ $.Params.LOWER }}
- P1_3: {{ $page.Params.LOWER }}
And even if I know about 1 case where it fails (there is an issue about it), your examples are surprising, and if you are correct, then they are bugs and should be fixed.