当前位置: 首页 > news >正文

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")}
http://www.jsqmd.com/news/140115/

相关文章:

  • Cordova与OpenHarmony营养管理系统
  • 傅立叶变换(一):简介
  • 为什么你的软文没流量?试试这个给新手的“三步定位法”
  • P14080 [GESP202509 八级] 最小生成树
  • 软件工程old friend老友助手小程序开发总结
  • Gin框架基础篇005_静态文件服务
  • 预训练 vs 微调:打造AI学霸的秘密
  • 5大DeepSeek推广公司测评,助力企业选择优质GEO服务商(2026年1月更新) - 品牌2025
  • 大数据与数字孪生:工业系统仿真优化
  • 豆包AI广告公司推荐(2026年) - 品牌2025
  • JavaScript 变量:let 和 const 该用谁?
  • 阅读笔记11
  • 芒格的“多元思维模型“:提高投资决策的全面性
  • 《数据采集与融合技术实践》综合设计——多源异构数据采集与融合应用综合实践
  • 做DeepSeek推广的公司,哪家比较靠谱?(2026年1月更新) - 品牌2025
  • 《国产数据库技术实践:DM8 从部署到企业级应用的深度探索(附避坑指南与性能调优)》
  • PI-36双麦降噪拾音模块:高清拾音,嘈杂环境克星
  • 程序员的职业生涯:从代码到架构师
  • Nordic典型芯片nRF5340的功能介绍
  • 北京种植义齿价格是多少
  • 在DeepSeek做营销推广,应该联系哪家公司?(2026年1月更新) - 品牌2025
  • 基于GD32的直流无刷电机控制算法实现和验证
  • “十五五”背景下的智慧农机治理,从作业感知到数据驱动的农业装备升级路径
  • 基于SpringBoot+Vue的健身管理系统(源码+lw+部署文档+讲解等)
  • Python机器学习入门(Scikit-learn)教程:从环境搭建到实战建模
  • 如何评估GEO公司的服务能力?2026优质GEO服务商推荐 - 品牌2025
  • 如何选择适合自己企业的GEO公司?(2026年1月更新) - 品牌2025
  • 2026年哪家AI公司的DeepSeek推广做的好? - 品牌2025
  • 文生图:AI 是怎么把文字变成画的?
  • Day41:四轴飞行器控制系统 (基础)