variable template not linebreaksbr filters equal else if-statement go go-templates

if statement - template - Usar condiciones dentro de plantillas



if django html (1)

Traté de convertir tu código en un ejemplo de trabajo mínimo, y creo que tu código y tu plantilla funcionan como se esperaba. Puedes ver mi código (y ejecutarlo) en el campo de juegos Go .

Mi suposición sobre lo que salió mal: ¿Notaste que {{define ...}} solo define una plantilla para uso futuro. Aún necesitará decirle a Go que realmente use esta plantilla, ya sea usando {{ template "header" }} o similar en una plantilla principal, o usando templates.ExecuteTemplate .

El uso de sentencias if dentro de plantillas realmente me deja perplejo.

Estoy tratando de poner una class = "active" dentro de una lista de navegación hecha con plantillas de golang, para hacer un menú de pestañas básicas que detecte la pestaña activa. Aquí está mi intento:

{{define "header"}} <!DOCTYPE html> <html> <head> <title>Geoprod</title> {{template "stylesheet" .}} </head> <body> <nav class="navbar" role="navigation"> <div class="navbar-header"> <a{{if eq .Active "accueil"}} class="active"{{end}} href="/">Geoprod</a> </div> <div class="navbar-body"> <ul class="navbar-list"> <li{{if eq .Active "societe"}} class="active"{{end}}><a href="/societe">Soci&eacutet&eacute</a></li> <li{{if eq .Active "dossier"}} class="active"{{end}}><a href="/dossier">Dossier</a></li> <li{{if eq .Active "temps"}} class="active"{{end}}><a href="/temps">Temps</a></li> <li{{if eq .Active "mails"}} class="active"{{end}}><a href="/mails">Mails</a></li> </ul> </div> </nav> {{end}}

Y en main.go:

var FuncMap = template.FuncMap{ "eq": func(a, b interface{}) bool { return a == b }, } var templates = template.Must(template.ParseGlob("templates/*.html"))

y en func main ()

templates.Funcs(FuncMap)

El programa compila, pero he descubierto que al agregar {{if eq .Active "something"}} class="active"{{end}} (^^ que incluí aquí) hace que el programa no muestre ningún texto más . ¿Alguna idea de por qué?