我正在使用Gin Gonic和一个HTML模板文件。
我的模板文件中包含类似于<!-- 这是我的注释 -->的(多行)HTML注释。我希望保留HTML内容在返回的输出中。
c.HTML(http.StatusOK, "static/templates/mytemplate.html", gin.H{ "name": "World", })
问题:如何配置模板引擎或c.HTML以不剥离模板中的HTML注释?
/static/templates/mytemplate.html
:
<!DOCTYPE html> <html lang="de"> <body> <!-- 这些行在输出中缺失。 --> Hello World </body> </html>
我的处理程序:
func NewRouter() *gin.Engine { router := gin.Default() // ... load templates from file system ... router.GET("/foo", fooHandler) return router } func fooHandler(c *gin.Context) { c.HTML(http.StatusOK, "static/templates/mytemplate.html", gin.H{ "name": "World", }) }
编辑后,我尝试将注释添加为常量:
{{"<!-- my comment goes here -->"}}
但是标签被转义为
<!-- foo -->
P粉2370294572023-07-19 16:31:03
我猜测HTML注释被删除的原因是因为我将HTML模板作为字符串读取(而不是直接作为文件读取)。仍然无法确定确切原因。不管怎样,对我有效的解决方法是在模板中使用占位符。
<!DOCTYPE html> <html lang="de"> <body> {{ .myComment }} Hello World </body> </html>
并将HTML注释本身作为参数传递:
const myHtmlComment string = ` <!-- these lines are (not) missing (anymore) in the output --> ` func fooHandler(c *gin.Context) { c.HTML(http.StatusOK, "static/templates/mytemplate.html", gin.H{ "name": "World", "myComment": template.HTML(myHtmlComment), }) }
使用import "html/template"导入