How to pass just a variable (not a struct member) into text/html template. Golang

Timur Fayzrakhmanov picture Timur Fayzrakhmanov · Jan 15, 2015 · Viewed 8.8k times · Source

is there any way to pass just a variable (string, int, bool) into template. For example (something similar):

import (
    "html/template"
)

func main() {
    ....
    tmpl := template.Must(template.ParseFiles("templates/index.html"))
    mux.HandleFunc("/", func(rw http.ResponseWriter, req *http.Request) {
        varmap := map[string]interface{}{
            "var1": "value",
            "var2": 100,
        }
        tmpl.ExecuteTemplate(rw, "index", varmap)
    })

    // content of index.html
    {{define "index"}}
    {{var1}} is equal to {{var2}}
    {{end}}
}

Answer

fabrizioM picture fabrizioM · Jan 15, 2015

Yes just use the dot in front of it:

http://play.golang.org/p/7NXu9SDiik

package main

import (
    "html/template"
    "log"
    "os"
)

var tmplString = `    // content of index.html
    {{define "index"}}
    {{.var1}} is equal to {{.var2}}
    {{end}}
`

func main() {
    tmpl, err := template.New("test").Parse(tmplString)
    if err != nil {
        log.Fatal(err)
    }
    varmap := map[string]interface{}{
        "var1": "value",
        "var2": 100,
    }
    tmpl.ExecuteTemplate(os.Stdout, "index", varmap)

}