
本文介绍了如何在 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 类型。例如:
启科网络商城系统由启科网络技术开发团队完全自主开发,使用国内最流行高效的PHP程序语言,并用小巧的MySql作为数据库服务器,并且使用Smarty引擎来分离网站程序与前端设计代码,让建立的网站可以自由制作个性化的页面。 系统使用标签作为数据调用格式,网站前台开发人员只要简单学习系统标签功能和使用方法,将标签设置在制作的HTML模板中进行对网站数据、内容、信息等的调用,即可建设出美观、个性的网站。
0
import "html/template"
func handler(w http.ResponseWriter, r *http.Request) {
// ...
body := "<p>This is <strong>HTML</strong> content.</p>"
page := &Page{
Title: "My Page",
Body: template.HTML(body), // 将字符串转换为 template.HTML
}
// ...
templates.ExecuteTemplate(w, "view.html", page)
}在模板中使用 {{.Body}}: 在模板文件中,直接使用 {{.Body}} 即可输出 HTML 内容,无需使用 printf 或 html 管道函数。例如:
<h1>{{.Title}}</h1>
<div>{{.Body}}</div>示例代码
以下是一个完整的示例代码,演示了如何在 Go 模板中使用 template.ExecuteTemplate 包含 HTML 内容:
package main
import (
"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("<p>This is <strong>HTML</strong> content.</p>"),
}
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 模板文件:
<!DOCTYPE html>
<html>
<head>
<title>{{.Title}}</title>
</head>
<body>
<h1>{{.Title}}</h1>
<div>{{.Body}}</div>
</body>
</html>注意事项
总结
通过将 HTML 内容转换为 template.HTML 类型,并修改数据结构,可以轻松地在 Go 模板中使用 template.ExecuteTemplate 函数渲染包含 HTML 内容的页面。然而,务必注意安全性问题,并采取适当的措施来防止 XSS 攻击。
以上就是Go 模板中使用 ExecuteTemplate 包含 HTML 内容的详细内容,更多请关注php中文网其它相关文章!
HTML怎么学习?HTML怎么入门?HTML在哪学?HTML怎么学才快?不用担心,这里为大家提供了HTML速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号