news 2026/1/25 19:37:06

Gin框架基础篇006_HTML模板加载与渲染

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Gin框架基础篇006_HTML模板加载与渲染

在Web开发中,模板渲染是将动态数据嵌入到HTML页面中的关键功能。Gin框架提供了强大且易用的HTML模板渲染功能,基于Go语言内置的html/template包实现。本文将详细介绍Gin框架的HTML模板渲染机制及其使用方法。

1. 模板加载

在使用Gin框架进行HTML模板渲染之前,我们需要先了解如何加载模板文件。

Gin框架提供了多种模板加载方式,以满足不同场景的需求:

  • LoadHTMLGlob:加载符合glob模式(glob是入参)的HTML文件,并将结果与HTML渲染器关联。
  • LoadHTMLFiles:加载一个或者多个HTML模板文件,并将结果与HTML渲染器关联。
  • LoadHTMLFS:从指定的文件系统加载符合pattern`模式的HTML模板文件,并将结果与HTML渲染器关联。

1.1. LoadHTMLGlob 模式匹配加载多个模板

LoadHTMLGlob方法可以加载符合指定模式的模板文件,使用通配符进行匹配:

示例:

funcmain(){r:=gin.Default()// 加载templates目录下所有模板文件r.LoadHTMLGlob("templates/**/*")r.Run(":8080")}

1.2. LoadHTMLFiles 加载单个/多个模板

使用LoadHTMLFiles可以加载一个或者多个HTML模板文件。

示例:

funcmain(){r:=gin.Default()// 加载指定模板文件r.LoadHTMLFiles("./templates/user/profile.tmpl","./templates/user/detail.tmpl","./templates/post/index.tmpl",)r.Run(":8080")}

1.3. LoadHTMLFS 从指定文件系统加载

使用LoadHTMLFiles可以从指定文件系统加载HTML模板文件。

源码:

func(engine*Engine)LoadHTMLFS(fs http.FileSystem,patterns...string){ifIsDebugging(){engine.HTMLRender=render.HTMLDebug{FileSystem:fs,Patterns:patterns,FuncMap:engine.FuncMap,Delims:engine.delims}return}templ:=template.Must(template.New("").Delims(engine.delims.Left,engine.delims.Right).Funcs(engine.FuncMap).ParseFS(filesystem.FileSystem{FileSystem:fs},patterns...))engine.SetHTMLTemplate(templ)}

示例:

funcmain(){r:=gin.Default()// 从指定文件系统加载模板文件r.LoadHTMLFS(http.Dir("./templates"),"./user/*","./post/*")r.Run(":8080")}

2. 模板渲染

Gin框架提供了c.HTML方法来渲染HTML模板。该方法接收HTTP状态码、模板名称和传递给模板的数据。

c.HTML方法是Gin框架渲染HTML页面的核心方法,它会自动设置Content-Type为text/html。

以下是一个基本的HTML模板渲染示例:

  • 工程目录

    • templates

      • index.tmpl

        <!DOCTYPEhtml><html><head><title>{{.title}}</title></head><body><h1>{{.content}}</h1><p>当前时间:{{.time}}</p></body></html>
    • main.go

      packagemainimport("github.com/gin-gonic/gin""net/http""time")funcmain(){r:=gin.Default()// 加载模板文件r.LoadHTMLGlob("templates/*")r.GET("/index",func(c*gin.Context){// 渲染模板c.HTML(http.StatusOK,"index.tmpl",gin.H{"title":"首页","content":"欢迎使用Gin框架","time":time.Now(),})})r.Run(":8080")}

项目启动后,浏览器访问http://127.0.0.1:8080/index,将看到渲染后的HTML页面。

3. 进阶使用

3.1. 自定义模板渲染器

gin提供了SetHTMLTemplate方法供我们自定义模板渲染器。

你可以使用自定义的html模板渲染。

示例:

import"html/template"funcmain(){router:=gin.Default()html:=template.Must(template.ParseFiles("file1","file2"))router.SetHTMLTemplate(html)router.Run(":8080")}

3.2. 自定模板分隔符

gin提供了Delims方法供我们设置模板的左右分隔符。默认左分隔符为{{,默认右分隔符为}}

示例:

router:=gin.Default()router.Delims("{[{","}]}")router.LoadHTMLGlob("/path/to/templates")

3.3. 自定义模板功能(模板函数)

gin提供了SetFuncMap方法来允许我们自定义模板函数。

示例:

  • 工程目录

    • templates

      • raw.tmpl

        Date: {[{.now | formatAsDate}]}
    • main.go

      packagemainimport("fmt""html/template""net/http""time""github.com/gin-gonic/gin")funcformatAsDate(t time.Time)string{year,month,day:=t.Date()returnfmt.Sprintf("%d%02d/%02d",year,month,day)}funcmain(){router:=gin.Default()router.Delims("{[{","}]}")router.SetFuncMap(template.FuncMap{"formatAsDate":formatAsDate,})router.LoadHTMLFiles("./templates/raw.tmpl")router.GET("/raw",func(c*gin.Context){c.HTML(http.StatusOK,"raw.tmpl",gin.H{"now":time.Date(2017,0o7,0o1,0,0,0,0,time.UTC),})})_=router.Run(":8080")}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/20 15:50:49

微爱帮监狱寄信写信小程序与焦作邮政系统对接技术方案

一、项目背景与目标1.1 合作背景微爱帮监狱寄信写信小程序与焦作市邮政管理局、焦作邮政支局建立战略合作&#xff0c;实现"线上电子化-线下实体化"的监狱信件流转闭环&#xff0c;确保信件安全、合规、可追溯。1.2 技术目标三方系统对接目标&#xff1a; ┌────…

作者头像 李华
网站建设 2026/1/25 19:45:37

数据交易中的数据基础设施与云服务

数据交易中的数据基础设施与云服务 关键词:数据交易、数据基础设施、云服务、数据安全、数据流通 摘要:本文深入探讨了数据交易中数据基础设施与云服务的相关内容。首先介绍了数据交易的背景以及数据基础设施和云服务在其中的重要性,接着详细解释了数据基础设施和云服务的核…

作者头像 李华
网站建设 2026/1/22 7:40:12

2025下半年软考纸质证书领取时间表来啦!

2025年下半年计算机技术与专业技术资格考试纸质证书各地领取时间已出炉&#xff01;部分地区有领取时间限制&#xff0c;通过考试了的同学们抓紧时间领取~一、各地软考纸质证书领取时间汇总1.上海现场领取时间&#xff1a;12月29日快递邮寄时间&#xff1a;12月22日开始2.重庆现…

作者头像 李华
网站建设 2026/1/21 3:23:37

C156D飞腾加固计算机在国产化计算体系中的应用定位

在国产化计算平台逐步落地的过程中&#xff0c;移动计算设备既需要满足自主可控要求&#xff0c;也需要具备在复杂环境中稳定运行的能力。 C156D飞腾加固计算机&#xff0c;正是在这一应用背景下形成的国产化加固计算设备方案。一、产品定位&#xff1a;面向国产化应用的加固计…

作者头像 李华
网站建设 2026/1/21 3:23:34

KAIST AI团队革命性突破:无需深度估计也能让视频自由变换视角

这项由韩国科学技术院&#xff08;KAIST&#xff09;人工智能实验室的金敏晶、金正豪、陈昊英、郑俊河以及朱在乙教授团队完成的研究&#xff0c;于2025年12月18日发表在计算机视觉顶级会议arXiv上&#xff0c;论文编号为arXiv:2512.17040v1。有兴趣深入了解的读者可以通过该编…

作者头像 李华
网站建设 2026/1/5 2:56:19

CRMEB WxJava,微信生态开发外挂来袭!

“CRMEB技术圈大事件”——CRMEB多商户系统Java版接入WxJava&#xff0c;实现微信生态开发升级&#xff01;&#x1f680; 用户体验&#xff0c;丝滑到飞起~ ✅ 快速登录不卡壳&#xff1a;告别登录转圈圈/授权失败&#xff0c;将复杂技术验证流程打包简化&#xff0c;丝滑登录…

作者头像 李华