Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Inserting HTML to golang template [duplicate]

I have a template in golang where I have a string that looks something like this:

<some_html> {{ .SomeOtherHTML }} </some_html>

I'm expecting an output to be something like this:

<some_html> <the_other_html/> </some_html>

But instead I'm seeing something like this:

<some_html> &lt;the_other_html/&lt; </some_html>

I'm also trying to insert some JSON but golang is escaping characters and adding things like " in places they shouldn't be.

How do I insert into an HTML template in golang without this happening?

like image 929
Alexander Kleinhans Avatar asked Nov 29 '22 22:11

Alexander Kleinhans


1 Answers

You should pass the variable as a template.HTML and not as a string:

tpl := template.Must(template.New("main").Parse(`{{define "T"}}{{.Html}}{{.String}}{{end}}`))
tplVars := map[string]interface{} {
    "Html": template.HTML("<p>Paragraph</p>"),
    "String": "<p>Paragraph</p>",
}
tpl.ExecuteTemplate(os.Stdout, "T", tplVars)

//OUTPUT: <p>Paragraph</p>&lt;p&gt;Paragraph&lt;/p&gt;

https://play.golang.org/p/QKKpQJ7gIs

As you can see, the variable we passed as a template.HTML is not escaped, but the one passed as a stringis.

like image 160
dave Avatar answered Dec 04 '22 13:12

dave