HTML Comments Not Displaying in Go Templates - Resolved
In Go applications, HTML comments are not rendered by default when using HTML templates. This can cause issues for certain scenarios, such as when using KnockoutJS's containerless control flow syntax. To address this problem, template.HTML can be utilized to retain HTML comments during template execution.
One method to employ template.HTML is by defining a custom template function called safe(). This function takes a string as an argument and returns it as template.HTML. By passing HTML comments through the safe() function, they can be marked as safe and will not be escaped or omitted during template rendering.
Here's an example:
<code class="go">import ( "html/template" "os" ) func main() { t := template.Must(template.New("").Funcs(template.FuncMap{ "safe": func(s string) template.HTML { return template.HTML(s) }, }).Parse(src)) t.Execute(os.Stdout, nil) } const src = `<html><body> {{safe "<!-- This is a comment -->"}} <div>Some <b>HTML</b> content</div> </body></html>`</code>
Output:
<html><body> <!-- This is a comment --> <div>Some <b>HTML</b> content</div> </body></html>
To utilize the safe() function, simply modify the HTML comments in the template to include the safe() function call, like so:
<code class="html">{{safe "<!-- Some HTML comment -->"}}</code>
Alternatively, use the pipe operator:
<code class="html">{{"<!-- Some HTML comment -->" | safe}}</code>
Note that HTML comments containing quotation marks ('"') need to be escaped, as below:
<code class="html">{{safe "<!-- Some \"HTML\" comment -->"}}</code>
Conditional HTML comments are not recommended as they can interfere with the context-sensitive escaping of the html/template package.
The above is the detailed content of Why are HTML comments not displayed in Go templates and how can I fix it?. For more information, please follow other related articles on the PHP Chinese website!