Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why am I seeing ZgotmplZ in my Go HTML template output?

When I'm calling a Go template function to output HTML, it displays ZgotmplZ.

Sample code:

http://play.golang.org/p/tfuJa_pFkm

package main  import (     "html/template"     "os" )  func main() {     funcMap := template.FuncMap{         "printSelected": func(s string) string {             if s == "test" {                 return `selected="selected"`             }             return ""         },          "safe": func(s string) template.HTML {             return template.HTML(s)         },     }     template.Must(template.New("Template").Funcs(funcMap).Parse(`     <option {{ printSelected "test" }} {{ printSelected "test" | safe }} >test</option>     `)).Execute(os.Stdout, nil)  } 

Output:

<option ZgotmplZ ZgotmplZ >test</option> 
like image 739
Randy Proctor Avatar asked Feb 08 '13 03:02

Randy Proctor


1 Answers

"ZgotmplZ" is a special value that indicates that unsafe content reached a CSS or URL context at runtime. The output of the example will be:

 <img src="#ZgotmplZ"> 

You can add a safe and attr function to the template funcMap:

package main

import (     "html/template"     "os" )  func main() {     funcMap := template.FuncMap{         "attr":func(s string) template.HTMLAttr{             return template.HTMLAttr(s)         },         "safe": func(s string) template.HTML {             return template.HTML(s)          },     }      template.Must(template.New("Template").Funcs(funcMap).Parse(`     <option {{  .attr |attr }} >test</option>         {{.html|safe}}      `)).Execute(os.Stdout,   map[string]string{"attr":`selected="selected"`,"html":`<option selected="selected">option</option>`}) } 

The output will look like:

<option selected="selected" >test</option> <option selected="selected">option</option> 

You may want to define some other functions which can convert string to template.CSS, template.JS, template.JSStr, template.URL etc.

like image 53
Joe Avatar answered Sep 28 '22 06:09

Joe