Calling variables inside Hugo partial

963 Views Asked by At

I have this code I use inside a partial in Hugo to pass context to it.

{{- $ctx := . -}}
    {{- $curPage := .page -}}
    {{- $otherVar := .otherVar -}}
    {{- with $curPage -}}
     {{ $section := .CurrentSection }}
    {{ if .IsHome }}
    <span class="post-section"><a href="{{ $section.Permalink }}" target="_blank">{{ $section.Title }}</a></span>
    {{ else }}
    <a href="{{  $section.Permalink }}"> {{  $section.Title }}</a>
    {{ end }}
    {{- end -}}

I then add {{- $curPage := . -}} at the top of the template where I want the partial to appear, then call the partial as {{ partial "partial-name.html" (dict "page" $curPage "otherVar" .) }}. However, the content returns nil on the homepage while it works everywhere else sitewide. Could anyone look at my code and tell me where I went wrong?

2

There are 2 best solutions below

4
On

Sorry - didn't see your with statement.

So {{- $curPage := .page -}}

is a typo.

.Page

Tested on local - most present version of hugo.

Also note - I don't think homepage has a section so your span will output very little as most of the currentsection or section related will return nothing.

3
On

Since you call the partial like this:

{{ partial "partial-name.html" (dict "page" $curPage "otherVar" .) }}
                                                     ^^^^^^^^^^^^
                                                        Notice

The dot (.) is contained in .otherVar. To find out if you are on the home page, use something simple like this at the top of partial-name.html:

{{ if .otherVar.IsHome }}
  <pre>Debugging: YES .IsHome</pre>
{{ else }}
  <pre>Debugging: NOT .IsHome</pre>
{{ end }}

After you test with the above GO HTML fragment, you can update your original code above.

TIP: In the Hugo world, it is common to use "context", "ctx", "page", or "Page" rather than "otherVar" as the name of the dictionary key that contains the dot. For a discussion about this, see Naming convention for page context (within a dictionary) when calling partial: seeking opinions in the Hugo discussion group.

ANOTHER TIP: There are some Hugo weirdnesses related to case sensitivity so I would not use "otherVar" anyway. Instead use "othervar", "context", or any name that is all lower case with no whitespace. I do this because I have spent a lot of time messing around with case sensitivity Hugo issues.