Golang : How to use if, eq and print properly in html template
Alright, just a simple problem that took me a while to get it right. Putting the solution down here for my own future reference. The problem that I was trying to solve is to print out the word active
whenever the URL segment match certain word. For instance,
http://domain.com/addrow
the URL first segment is the word addrow
and therefore in the generated HTML code should have the <li class="active">
for Add Row
. Such as this
<ul>
<li class="active"><a href="/addrow" class="">Add Row</a></li>
<li class=""><a href="/deleterow" class="">Delete Row</a></li>
</ul>
To do this properly with html template language in Golang. First, create a function to get the current URI.
// GetURISegment - return URL item from a given position
func GetURISegment(r *http.Request, position int) string {
uriSegments := strings.Split(r.URL.Path, "/")
return uriSegments[position]
}
and follow by
templateDataMap["CurrentSegment"] = GetURISegment(r, 1)
// my own stuff, you should use your own
var dashboardPageNavigation = template.Must(template.New("dashboardPageNavigation").Parse(navigation.NavigationHTML))
the templateDataMap variable will be passed to NavigationHTML template.
In the NavigationHTML, check if the current URI segment name equals to the word that matches the navigation item names. If yes, print out the word active
<ul>
<li class="{{if(eq .CurrentSegment "addproperty")}}{{print "active"}}{{else}}{{print ""}}{{end}}"><a href="/addproperty" class="">Add Property</a></li>
<li class="{{if(eq .CurrentSegment "deleteproperty")}}{{print "active"}}{{else}}{{print ""}}{{end}}"><a href="/deleteproperty" class="">Delete Property</a></li>
</ul>
Too hard to read?
<ul>
<li class="{{if(eq .CurrentSegment "addproperty")}}
{{print "active"}}
{{else}}
{{print ""}}
{{end}}">
<a href="/addproperty" class="">Add Property</a>
</li>
<li class="{{if(eq .CurrentSegment "deleteproperty")}}
{{print "active"}}
{{else}}
{{print ""}}
{{end}}">
<a href="/deleteproperty" class="">Delete Property</a>
</li>
</ul>
Hope this helps and happy coding!
References:
https://socketloop.com/tutorials/golang-get-uri-segments-by-number-and-assign-as-variable-example
https://golang.org/pkg/text/template/#hdr-Functions <-- text/template but applicable to html/template as well
https://stackoverflow.com/questions/44240003/how-to-add-conditional-sentences-in-template
See also : Golang : Populate dropdown with html/template example
By Adam Ng
IF you gain some knowledge or the information here solved your programming problem. Please consider donating to the less fortunate or some charities that you like. Apart from donation, planting trees, volunteering or reducing your carbon footprint will be great too.
Advertisement
Tutorials
+11.8k Golang : Find network of an IP address
+6.3k Golang : How to find out similarity between two strings with Jaro-Winkler Distance?
+4.1k Golang : How to solve "too many .rsrc sections" error?
+12.3k Golang : How to check if IP address is in range
+8k Golang : Embed secret text string into binary(executable) file
+9.2k Golang : Get remaining text such as id or filename after last segment in URL path
+6.1k Golang : Tell color name with OpenCV example
+20.9k Golang : Daemonizing a simple web server process example
+11.6k Golang : Send email with attachment(RFC2822) using Gmail API example
+2.9k Javascript : Empty an array example
+5.4k Golang : constant 20013 overflows byte error message
+35.7k Golang : Remove dashes(or any character) from string