Gin HTML 模板渲染
1、全部模板放在一个目录里面的配置方法
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title></head><body><h1> 这是一个 html 模板 </h1><h3>{{.title}}</h3></body></html>
2、Gin 框架中使用 c.HTML 可以渲染模板,渲染模板前需要使用 LoadHTMLGlob()或者
package mainimport ("net/http""github.com/gin-gonic/gin")func main() {router := gin.Default()router.LoadHTMLGlob("templates/*")//router.LoadHTMLFiles("templates/template1.html", "templates/template2.html")router.GET("/", func(c *gin.Context) {c.HTML(http.StatusOK, "index.html", gin.H{"title": "Main website",})})router.Run(":8080")}
2、模板放在不同目录里面的配置方法
{{ define "admin/index.html" }}<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title></head><body><h1>后台模板</h1><h3>{{.title}}</h3></body></html>{{ end }}
templates/default/index.html
{{ define "default/index.html" }}<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title></head><body><h1>前台模板</h1><h3>{{.title}}</h3></body></html>{{end}}
业务逻辑
package mainimport ("net/http""github.com/gin-gonic/gin")func main() {router := gin.Default()router.LoadHTMLGlob("templates/**/*")router.GET("/", func(c *gin.Context) {c.HTML(http.StatusOK, "default/index.html", gin.H{"title": "前台首页",})})router.GET("/admin", func(c *gin.Context) {c.HTML(http.StatusOK, "admin/index.html", gin.H{"title": "后台首页",})})router.Run(":8080")}
注意:如果模板在多级目录里面的话需要这样配置 r.LoadHTMLGlob("templates/**/**/*") /**
3、gin 模板基本语法
1、{{.}} 输出数据
package mainimport ("net/http""github.com/gin-gonic/gin")type UserInfo struct {Name stringGender stringAge int}func main() {router := gin.Default()router.LoadHTMLGlob("templates/**/*")user := UserInfo{Name: "张三 ",Gender: "男",Age: 18,}router.GET("/", func(c *gin.Context) {c.HTML(http.StatusOK, "default/index.html", map[string]interface{}{"title": "前台首页","user": user,})})router.Run(":8080")}
模板
{{ define "default/index.html" }}<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title></head><body><h1>前台模板 </h1><h3>{{.title}}</h3><h4>{{.user.Name}}</h4><h4>{{.user.Age}}</h4></body></html>{{end}}
2.注释
{{/* a comment */}}
注释,执行时会忽略。可以多行。注释不能嵌套,并且必须紧贴分界符始止。
3、变量
<h4>{{$obj := .title}}</h4><h4>{{$obj}}</h4>
4.移除空格
{{- .Name -}}
注意:-要紧挨{{和}},同时与模板值之间需要使用空格分隔。
5.比较函数
6.条件判断
{{if pipeline}} T1 {{end}}{{if pipeline}} T1 {{else}} T0 {{end}}{{if pipeline}} T1 {{else if pipeline}} T0 {{end}}{{if gt .score 60}}及格{{else}}不及格{{end}}{{if gt .score 90}}优秀{{else if gt .score 60}}及格{{else}}不及格{{end}}
7.range
{{range $key,$value := .obj}}{{$value}}{{end}}
如果 pipeline 的值其长度为 0,不会有任何输出
{{$key,$value := .obj}}{{$value}}{{else}}pipeline 的值其长度为 0{{end}}
如果 pipeline 的值其长度为 0,则会执行 T0
router.GET("/", func(c *gin.Context) {c.HTML(http.StatusOK, "default/index.html", map[string]interface{}{"hobby": []string{"吃饭", " 睡觉 ", " 写代码 "},})}){{range $key,$value := .hobby}}<p>{{$value}}</p>{{end}}
8.With
user := UserInfo{Name:"张三 ",Gender: "男 ",Age: 18,}router.GET("/", func(c *gin.Context) {c.HTML(http.StatusOK, "default/index.html", map[string]interface{}{"user": user,})})
不适应with输出数据:
<h4>{{.user.Name}}</h4><h4>{{.user.Gender}}</h4><h4>{{.user.Age}}</h4>
使用with输出数据:
{{with .user}}<h4>姓名: {{.Name}}</h4><h4>性别: {{.user.Gender}}</h4><h4>年龄: {{.Age}}</h4>{{end}}
9.预定义函数 (了解)
预定义的全局函数如下:
and
{{len .title}}{{index .hobby 2}}
10.自定义模板函数
router.SetFuncMap(template.FuncMap{"formatDate": formatAsDate,})
package mainimport ("fmt""html/template""net/http""time""github.com/gin-gonic/gin")func formatAsDate(t time.Time) string {year, month, day := t.Date()return fmt.Sprintf("%d/%02d/%02d", year, month, day)}func main() {router := gin.Default()//注册全局模板函数 注意顺序,注册模板函数需要在加载模板上面router.SetFuncMap(template.FuncMap{"formatDate": formatAsDate,})//加载模板router.LoadHTMLGlob("templates/**/*")router.GET("/", func(c *gin.Context) {c.HTML(http.StatusOK, "default/index.html", map[string]interface{}{"title": "前台首页","now": time.Now(),})})router.Run(":8080")}
模板里面的用法
{{.now | formatDate}}或者{{formatDate .now }}
4.嵌套 template
{{ define "default/page_header.html" }}<h1>这是一个头部 </h1>{{end}}
2、外部引入
{{template "default/page_header.html" .}}
<!-- 相当于给模板定义一个名字 define end 成对出现 -->{{ define "default/index.html" }}<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title></head><body>{{template "default/page_header.html" .}}</body></html>{{end}}
5.静态文件服务
func main() {r := gin.Default()r.Static("/static", "./static")r.LoadHTMLGlob("templates/**/*")// ...r.Run(":8080")}<link rel="stylesheet" href="/static/css/base.css" />
原文地址:https://blog.csdn.net/qq_30895747/article/details/143804831
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!