Go 模板中使用 ExecuteTemplate 包含 HTML 内容

go 模板中使用 executetemplate 包含 html 内容

本文介绍了如何在 Go 模板中使用 template.ExecuteTemplate 函数渲染包含 HTML 内容的页面。通过将需要渲染的 HTML 内容转换为 template.HTML 类型,并修改数据结构,可以安全地在模板中输出 HTML 代码,避免转义,实现预期的页面效果。

在使用 Go 语言的 html/template 包时,默认会对 HTML 内容进行转义,以防止跨站脚本攻击(XSS)。然而,在某些场景下,我们需要在模板中直接输出 HTML 代码,而不进行转义。本文将介绍如何使用 template.ExecuteTemplate 函数,结合 template.HTML 类型,实现在 Go 模板中包含 HTML 内容的功能。

核心概念:template.HTML 类型

template.HTML 是 html/template 包提供的一个类型,用于标记一段字符串为 HTML 代码,告诉模板引擎不要对其进行转义。

立即学习“前端免费学习笔记(深入)”;

实现步骤

修改数据结构: 将存储 HTML 内容的字段类型修改为 template.HTML。例如,如果你的数据结构如下:

type Page struct {    Title string    Body  []byte // 或者 string}

则需要将其修改为:

import "html/template"type Page struct {    Title string    Body  template.HTML}

转换 HTML 内容: 在将数据传递给模板之前,将 HTML 内容转换为 template.HTML 类型。例如:

import "html/template"func handler(w http.ResponseWriter, r *http.Request) {    // ...    body := "

This is HTML content.

Zen Cart
Zen Cart

Zen Cart是一款开源购物车系统,用于建立网上商店,源代码完全开放自由修改;功能强大,上千个免费插件;界面漂亮,大量免费模板;安全,十几万家在线商店应用。 Zen Cart v1.5.1 中文插件版包含以下内容预装15个免费模板图像管理模块 Image Handler多栏列表模块 Column Layout内置编辑器 CKEditor数据库备份模块 DB Backup快速更新模块 Quick

Zen Cart 0
查看详情 Zen Cart
" page := &Page{ Title: "My Page", Body: template.HTML(body), // 将字符串转换为 template.HTML } // ... templates.ExecuteTemplate(w, "view.html", page)}

在模板中使用 {{.Body}}: 在模板文件中,直接使用 {{.Body}} 即可输出 HTML 内容,无需使用 printf 或 html 管道函数。例如:

{{.Title}}

{{.Body}}

示例代码

以下是一个完整的示例代码,演示了如何在 Go 模板中使用 template.ExecuteTemplate 包含 HTML 内容:

package mainimport (    "html/template"    "net/http")type Page struct {    Title string    Body  template.HTML}var templates = template.Must(template.ParseFiles("view.html"))func viewHandler(w http.ResponseWriter, r *http.Request) {    page := &Page{        Title: "My Page",        Body:  template.HTML("

This is HTML content.

"), } err := templates.ExecuteTemplate(w, "view.html", page) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) }}func main() { http.HandleFunc("/", viewHandler) http.ListenAndServe(":8080", nil)}

view.html 模板文件:

    {{.Title}}    

{{.Title}}

{{.Body}}

注意事项

安全性: 直接输出 HTML 内容存在安全风险,可能导致 XSS 攻击。请确保你了解潜在的风险,并采取适当的安全措施,例如对用户输入进行严格的过滤和验证。类型转换: 必须将 HTML 内容转换为 template.HTML 类型,才能告诉模板引擎不要对其进行转义。模板函数: 避免在模板中使用 printf “%s” .Body | html,直接使用 {{.Body}} 即可。

总结

通过将 HTML 内容转换为 template.HTML 类型,并修改数据结构,可以轻松地在 Go 模板中使用 template.ExecuteTemplate 函数渲染包含 HTML 内容的页面。然而,务必注意安全性问题,并采取适当的措施来防止 XSS 攻击。

以上就是Go 模板中使用 ExecuteTemplate 包含 HTML 内容的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1416289.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
Go Template 多参数传递技巧:使用自定义 dict 函数
上一篇 2025年12月16日 10:23:01
Go语言中简化导入类型和方法的调用
下一篇 2025年12月16日 10:23:09

相关推荐

发表回复

登录后才能评论
关注微信