一、模板引擎
1. 模板中绑定基本数据、字符串、数值、布尔值
default.go:
package controllers import ( "github.com/astaxie/beego" ) type MainController struct { beego.Controller } func (c *MainController) Get() { // 1. 模板中绑定基本数据、字符串、数值、布尔值 c.Data["website"] = "beego 教程" c.Data["title"] = "你好beego" c.Data["num"] = 12 c.Data["flag"] = true c.TplName = "index.html" }
index.html:
<!DOCTYPE html> <html lang="en" xmlns="http://www.w3.org/1999/html"> <head> <meta charset="UTF-8"> <title>{{.Website}}</title> </head> <body> <h2>1. 模板中绑定基本数据、字符串、数值、布尔值</h2> <p>{{.title}}</p> <p>{{.num}}</p> <p>{{.flag}}</p> </body> </html>
显示:
2. 模板中绑定结构体数据
default.go:
package controllers import ( "github.com/astaxie/beego" ) type MainController struct { beego.Controller } type Article struct { Title string Content string } func (c *MainController) Get() { // 1. 模板中绑定基本数据、字符串、数值、布尔值 c.Data["website"] = "beego 教程" c.Data["title"] = "你好beego" c.Data["num"] = 12 c.Data["flag"] = true // 2. 模板中绑定结构体数据 article := Article{ Title: "Golang教程", Content: "beego实战项目", } c.Data["article"] = article c.TplName = "index.html" }
index.html:
<!DOCTYPE html> <html lang="en" xmlns="http://www.w3.org/1999/html"> <head> <meta charset="UTF-8"> <title>{{.Website}}</title> </head> <body> <h2>1. 模板中绑定基本数据、字符串、数值、布尔值</h2> <p>{{.title}}</p> <p>{{.num}}</p> <p>{{.flag}}</p> <br> <h2>2. 模板中绑定结构体数据</h2> <p>{{.article.Title}}</p> <p>{{.article.Content}}</p> <br> </body> </html>
显示:
3. 模板中自定义变量
index.html:
<!DOCTYPE html> <html lang="en" xmlns="http://www.w3.org/1999/html"> <head> <meta charset="UTF-8"> <title>{{.Website}}</title> </head> <body> <h2>1. 模板中绑定基本数据、字符串、数值、布尔值</h2> <p>{{.title}}</p> <p>{{.num}}</p> <p>{{.flag}}</p> <br> <h2>2. 模板中绑定结构体数据</h2> <p>{{.article.Title}}</p> <p>{{.article.Content}}</p> <br> <h2>3. 模板中自定义变量</h2> {{$title := .title}} {{$title}} </body> </html>
显示:
4. 模板中循环遍历 range 模板中循环切片
default.go:
package controllers import ( "github.com/astaxie/beego" ) type MainController struct { beego.Controller } type Article struct { Title string Content string } func (c *MainController) Get() { // 1. 模板中绑定基本数据、字符串、数值、布尔值 c.Data["website"] = "beego 教程" c.Data["title"] = "你好beego" c.Data["num"] = 12 c.Data["flag"] = true // 2. 模板中绑定结构体数据 article := Article{ Title: "Golang教程", Content: "beego实战项目", } c.Data["article"] = article // 4. 模板中循环遍历 range 模板中循环切片 c.Data["sliceList"] = []string{"php", "golang", "python"} c.TplName = "index.html" }
index.html:
<!DOCTYPE html> <html lang="en" xmlns="http://www.w3.org/1999/html"> <head> <meta charset="UTF-8"> <title>{{.Website}}</title> </head> <body> <h2>1. 模板中绑定基本数据、字符串、数值、布尔值</h2> <p>{{.title}}</p> <p>{{.num}}</p> <p>{{.flag}}</p> <br> <h2>2. 模板中绑定结构体数据</h2> <p>{{.article.Title}}</p> <p>{{.article.Content}}</p> <br> <h2>3. 模板中自定义变量</h2> {{$title := .title}} {{$title}} <h2>4. 模板中循环遍历 range 模板中循环切片</h2> <ul> {{range $key,$val := .sliceList}} <li>{{$key}}---{{$val}}</li> {{end}} </ul> </body> </html>
显示:
5. 模板中循环遍历 range 模板中循环 Map
default.go:
package controllers import ( "github.com/astaxie/beego" ) type MainController struct { beego.Controller } type Article struct { Title string Content string } func (c *MainController) Get() { // 1. 模板中绑定基本数据、字符串、数值、布尔值 c.Data["website"] = "beego 教程" c.Data["title"] = "你好beego" c.Data["num"] = 12 c.Data["flag"] = true // 2. 模板中绑定结构体数据 article := Article{ Title: "Golang教程", Content: "beego实战项目", } c.Data["article"] = article // 4. 模板中循环遍历 range 模板中循环切片 c.Data["sliceList"] = []string{"php", "golang", "python"} // 5. 模板中循环遍历 range 模板中循环 Map userinfo := make(map[string]interface{}) userinfo["username"] = "张三" userinfo["age"] = 20 userinfo["sex"] = "男" c.Data["userinfo"] = userinfo c.TplName = "index.html" }
index.html:
<!DOCTYPE html> <html lang="en" xmlns="http://www.w3.org/1999/html"> <head> <meta charset="UTF-8"> <title>{{.Website}}</title> </head> <body> <h2>1. 模板中绑定基本数据、字符串、数值、布尔值</h2> <p>{{.title}}</p> <p>{{.num}}</p> <p>{{.flag}}</p> <br> <h2>2. 模板中绑定结构体数据</h2> <p>{{.article.Title}}</p> <p>{{.article.Content}}</p> <br> <h2>3. 模板中自定义变量</h2> {{$title := .title}} {{$title}} <h2>4. 模板中循环遍历 range 模板中循环切片</h2> <ul> {{range $key,$val := .sliceList}} <li>{{$key}}---{{$val}}</li> {{end}} </ul> <h2>5. 模板中循环遍历 range 模板中循环 Map</h2> <ul> {{range $key,$val := .userinfo}} <li>{{$key}}---{{$val}}</li> {{end}} </ul> </body> </html>
显示:
6. 模板中循环遍历结构体类型的切片
default.go:
package controllers import ( "github.com/astaxie/beego" ) type MainController struct { beego.Controller } type Article struct { Title string Content string } func (c *MainController) Get() { // 1. 模板中绑定基本数据、字符串、数值、布尔值 c.Data["website"] = "beego 教程" c.Data["title"] = "你好beego" c.Data["num"] = 12 c.Data["flag"] = true // 2. 模板中绑定结构体数据 article := Article{ Title: "Golang教程", Content: "beego实战项目", } c.Data["article"] = article // 4. 模板中循环遍历 range 模板中循环切片 c.Data["sliceList"] = []string{"php", "golang", "python"} // 5. 模板中循环遍历 range 模板中循环 Map userinfo := make(map[string]interface{}) userinfo["username"] = "张三" userinfo["age"] = 20 userinfo["sex"] = "男" c.Data["userinfo"] = userinfo // 6. 模板中循环遍历结构体类型的切片 c.Data["articleList"] = []Article{ { Title: "新闻1", Content: "新闻内容1", }, { Title: "新闻2", Content: "新闻内容2", }, { Title: "新闻3", Content: "新闻内容3", }, } c.TplName = "index.html" }
index.html:
<!DOCTYPE html> <html lang="en" xmlns="http://www.w3.org/1999/html"> <head> <meta charset="UTF-8"> <title>{{.Website}}</title> </head> <body> <h2>1. 模板中绑定基本数据、字符串、数值、布尔值</h2> <p>{{.title}}</p> <p>{{.num}}</p> <p>{{.flag}}</p> <br> <h2>2. 模板中绑定结构体数据</h2> <p>{{.article.Title}}</p> <p>{{.article.Content}}</p> <br> <h2>3. 模板中自定义变量</h2> {{$title := .title}} {{$title}} <h2>4. 模板中循环遍历 range 模板中循环切片</h2> <ul> {{range $key,$val := .sliceList}} <li>{{$key}}---{{$val}}</li> {{end}} </ul> <h2>5. 模板中循环遍历 range 模板中循环 Map</h2> <ul> {{range $key,$val := .userinfo}} <li>{{$key}}---{{$val}}</li> {{end}} </ul> <h2>6. 模板中循环遍历结构体类型的切片</h2> <ul> {{range $key,$val := .articleList}} <li>{{$key}}---{{$val.Title}}---{{$val.Content}}</li> {{end}} </ul> </body> </html>
显示:
7. 结构体类型的切片的另一种定义方式
default.go:
package controllers import ( "github.com/astaxie/beego" ) type MainController struct { beego.Controller } type Article struct { Title string Content string } func (c *MainController) Get() { // 1. 模板中绑定基本数据、字符串、数值、布尔值 c.Data["website"] = "beego 教程" c.Data["title"] = "你好beego" c.Data["num"] = 12 c.Data["flag"] = true // 2. 模板中绑定结构体数据 article := Article{ Title: "Golang教程", Content: "beego实战项目", } c.Data["article"] = article // 4. 模板中循环遍历 range 模板中循环切片 c.Data["sliceList"] = []string{"php", "golang", "python"} // 5. 模板中循环遍历 range 模板中循环 Map userinfo := make(map[string]interface{}) userinfo["username"] = "张三" userinfo["age"] = 20 userinfo["sex"] = "男" c.Data["userinfo"] = userinfo // 6. 模板中循环遍历结构体类型的切片 c.Data["articleList"] = []Article{ { Title: "新闻1", Content: "新闻内容1", }, { Title: "新闻2", Content: "新闻内容2", }, { Title: "新闻3", Content: "新闻内容3", }, } // 7. 结构体类型的切片的另一种定义方式 /* 匿名结构体,它就是一个类型 struct { Title string } */ c.Data["cmsList"] = []struct{ Title string }{ { Title: "新闻1", }, { Title: "新闻2", }, { Title: "新闻3", }, } c.TplName = "index.html" }
index.html:
<!DOCTYPE html> <html lang="en" xmlns="http://www.w3.org/1999/html"> <head> <meta charset="UTF-8"> <title>{{.Website}}</title> </head> <body> <h2>1. 模板中绑定基本数据、字符串、数值、布尔值</h2> <p>{{.title}}</p> <p>{{.num}}</p> <p>{{.flag}}</p> <br> <h2>2. 模板中绑定结构体数据</h2> <p>{{.article.Title}}</p> <p>{{.article.Content}}</p> <br> <h2>3. 模板中自定义变量</h2> {{$title := .title}} {{$title}} <h2>4. 模板中循环遍历 range 模板中循环切片</h2> <ul> {{range $key,$val := .sliceList}} <li>{{$key}}---{{$val}}</li> {{end}} </ul> <h2>5. 模板中循环遍历 range 模板中循环 Map</h2> <ul> {{range $key,$val := .userinfo}} <li>{{$key}}---{{$val}}</li> {{end}} </ul> <h2>6. 模板中循环遍历结构体类型的切片</h2> <ul> {{range $key,$val := .articleList}} <li>{{$key}}---{{$val.Title}}---{{$val.Content}}</li> {{end}} </ul> <h2>7. 结构体类型的切片的另一种定义方式</h2> <ul> {{range $key,$val := .cmsList}} <li>{{$key}}---{{$val.Title}}</li> {{end}} </ul> </body> </html>
显示:
8. 模板中的条件
default.go:
package controllers import ( "github.com/astaxie/beego" ) type MainController struct { beego.Controller } type Article struct { Title string Content string } func (c *MainController) Get() { // 1. 模板中绑定基本数据、字符串、数值、布尔值 c.Data["website"] = "beego 教程" c.Data["title"] = "你好beego" c.Data["num"] = 12 c.Data["flag"] = true // 2. 模板中绑定结构体数据 article := Article{ Title: "Golang教程", Content: "beego实战项目", } c.Data["article"] = article // 4. 模板中循环遍历 range 模板中循环切片 c.Data["sliceList"] = []string{"php", "golang", "python"} // 5. 模板中循环遍历 range 模板中循环 Map userinfo := make(map[string]interface{}) userinfo["username"] = "张三" userinfo["age"] = 20 userinfo["sex"] = "男" c.Data["userinfo"] = userinfo // 6. 模板中循环遍历结构体类型的切片 c.Data["articleList"] = []Article{ { Title: "新闻1", Content: "新闻内容1", }, { Title: "新闻2", Content: "新闻内容2", }, { Title: "新闻3", Content: "新闻内容3", }, } // 7. 结构体类型的切片的另一种定义方式 /* 匿名结构体,它就是一个类型 struct { Title string } */ c.Data["cmsList"] = []struct{ Title string }{ { Title: "新闻1", }, { Title: "新闻2", }, { Title: "新闻3", }, } // 8. 模板中的条件判断 c.Data["isLogin"] = true c.Data["isHome"] = true c.Data["isAbout"] = true c.TplName = "index.html" }
index.html:
<!DOCTYPE html> <html lang="en" xmlns="http://www.w3.org/1999/html"> <head> <meta charset="UTF-8"> <title>{{.Website}}</title> </head> <body> <h2>1. 模板中绑定基本数据、字符串、数值、布尔值</h2> <p>{{.title}}</p> <p>{{.num}}</p> <p>{{.flag}}</p> <br> <h2>2. 模板中绑定结构体数据</h2> <p>{{.article.Title}}</p> <p>{{.article.Content}}</p> <br> <h2>3. 模板中自定义变量</h2> {{$title := .title}} {{$title}} <h2>4. 模板中循环遍历 range 模板中循环切片</h2> <ul> {{range $key,$val := .sliceList}} <li>{{$key}}---{{$val}}</li> {{end}} </ul> <h2>5. 模板中循环遍历 range 模板中循环 Map</h2> <ul> {{range $key,$val := .userinfo}} <li>{{$key}}---{{$val}}</li> {{end}} </ul> <h2>6. 模板中循环遍历结构体类型的切片</h2> <ul> {{range $key,$val := .articleList}} <li>{{$key}}---{{$val.Title}}---{{$val.Content}}</li> {{end}} </ul> <h2>7. 结构体类型的切片的另一种定义方式</h2> <ul> {{range $key,$val := .cmsList}} <li>{{$key}}---{{$val.Title}}</li> {{end}} </ul> <h2>8. 模板中的条件</h2> {{if .isLogin}} <p>isLogin等于true</p> {{end}} {{if .isHome}} <p>isHome等于true</p> {{else}} <p>isHome等于false</p> {{end}} </body> </html>
显示:
9. if 语句条件判断 eq/ne/lt/le/gt/ge
default.go:
package controllers import ( "github.com/astaxie/beego" ) type MainController struct { beego.Controller } type Article struct { Title string Content string } func (c *MainController) Get() { // 1. 模板中绑定基本数据、字符串、数值、布尔值 c.Data["website"] = "beego 教程" c.Data["title"] = "你好beego" c.Data["num"] = 12 c.Data["flag"] = true // 2. 模板中绑定结构体数据 article := Article{ Title: "Golang教程", Content: "beego实战项目", } c.Data["article"] = article // 4. 模板中循环遍历 range 模板中循环切片 c.Data["sliceList"] = []string{"php", "golang", "python"} // 5. 模板中循环遍历 range 模板中循环 Map userinfo := make(map[string]interface{}) userinfo["username"] = "张三" userinfo["age"] = 20 userinfo["sex"] = "男" c.Data["userinfo"] = userinfo // 6. 模板中循环遍历结构体类型的切片 c.Data["articleList"] = []Article{ { Title: "新闻1", Content: "新闻内容1", }, { Title: "新闻2", Content: "新闻内容2", }, { Title: "新闻3", Content: "新闻内容3", }, } // 7. 结构体类型的切片的另一种定义方式 /* 匿名结构体,它就是一个类型 struct { Title string } */ c.Data["cmsList"] = []struct{ Title string }{ { Title: "新闻1", }, { Title: "新闻2", }, { Title: "新闻3", }, } // 8. 模板中的条件判断 c.Data["isLogin"] = true c.Data["isHome"] = true c.Data["isAbout"] = true // 9. if 语句条件判断 eq/ne/lt/le/gt/ge c.Data["n1"] = 12 c.Data["n2"] = 6 c.TplName = "index.html" }
index.html:
<!DOCTYPE html> <html lang="en" xmlns="http://www.w3.org/1999/html"> <head> <meta charset="UTF-8"> <title>{{.Website}}</title> </head> <body> <h2>1. 模板中绑定基本数据、字符串、数值、布尔值</h2> <p>{{.title}}</p> <p>{{.num}}</p> <p>{{.flag}}</p> <br> <h2>2. 模板中绑定结构体数据</h2> <p>{{.article.Title}}</p> <p>{{.article.Content}}</p> <br> <h2>3. 模板中自定义变量</h2> {{$title := .title}} {{$title}} <h2>4. 模板中循环遍历 range 模板中循环切片</h2> <ul> {{range $key,$val := .sliceList}} <li>{{$key}}---{{$val}}</li> {{end}} </ul> <h2>5. 模板中循环遍历 range 模板中循环 Map</h2> <ul> {{range $key,$val := .userinfo}} <li>{{$key}}---{{$val}}</li> {{end}} </ul> <h2>6. 模板中循环遍历结构体类型的切片</h2> <ul> {{range $key,$val := .articleList}} <li>{{$key}}---{{$val.Title}}---{{$val.Content}}</li> {{end}} </ul> <h2>7. 结构体类型的切片的另一种定义方式</h2> <ul> {{range $key,$val := .cmsList}} <li>{{$key}}---{{$val.Title}}</li> {{end}} </ul> <h2>8. 模板中的条件</h2> {{if .isLogin}} <p>isLogin等于true</p> {{end}} {{if .isHome}} <p>isHome等于true</p> {{else}} <p>isHome等于false</p> {{end}} <h2>9. if 语句条件判断 eq/ne/lt/le/gt/ge</h2> {{if gt .n1 .n2}} <p>n1大于n2</p> {{end}} {{if eq .n1 .n2}} <p>n1等于n2</p> {{else}} <p>n1不等于n2</p> {{end}} </body> </html>
显示:
10. define 自定义模板
index.html:
<!DOCTYPE html> <html lang="en" xmlns="http://www.w3.org/1999/html"> <head> <meta charset="UTF-8"> <title>{{.Website}}</title> </head> <body> <h2>1. 模板中绑定基本数据、字符串、数值、布尔值</h2> <p>{{.title}}</p> <p>{{.num}}</p> <p>{{.flag}}</p> <br> <h2>2. 模板中绑定结构体数据</h2> <p>{{.article.Title}}</p> <p>{{.article.Content}}</p> <br> <h2>3. 模板中自定义变量</h2> {{$title := .title}} {{$title}} <h2>4. 模板中循环遍历 range 模板中循环切片</h2> <ul> {{range $key,$val := .sliceList}} <li>{{$key}}---{{$val}}</li> {{end}} </ul> <h2>5. 模板中循环遍历 range 模板中循环 Map</h2> <ul> {{range $key,$val := .userinfo}} <li>{{$key}}---{{$val}}</li> {{end}} </ul> <h2>6. 模板中循环遍历结构体类型的切片</h2> <ul> {{range $key,$val := .articleList}} <li>{{$key}}---{{$val.Title}}---{{$val.Content}}</li> {{end}} </ul> <h2>7. 结构体类型的切片的另一种定义方式</h2> <ul> {{range $key,$val := .cmsList}} <li>{{$key}}---{{$val.Title}}</li> {{end}} </ul> <h2>8. 模板中的条件</h2> {{if .isLogin}} <p>isLogin等于true</p> {{end}} {{if .isHome}} <p>isHome等于true</p> {{else}} <p>isHome等于false</p> {{end}} <h2>9. if 语句条件判断 eq/ne/lt/le/gt/ge</h2> {{if gt .n1 .n2}} <p>n1大于n2</p> {{end}} {{if eq .n1 .n2}} <p>n1等于n2</p> {{else}} <p>n1不等于n2</p> {{end}} <h2>10. define 自定义模板</h2> {{define "a"}} <h4>这是一个自定义的代码块</h4> <p>111</p> {{end}} <div> {{template "a" .}} </div> </body> </html>
显示:
11. 外部自定义模板
index.html:
<!DOCTYPE html> <html lang="en" xmlns="http://www.w3.org/1999/html"> <head> <meta charset="UTF-8"> <title>{{.Website}}</title> </head> <body> {{template "/public/header.html"}} <h2>1. 模板中绑定基本数据、字符串、数值、布尔值</h2> <p>{{.title}}</p> <p>{{.num}}</p> <p>{{.flag}}</p> <br> <h2>2. 模板中绑定结构体数据</h2> <p>{{.article.Title}}</p> <p>{{.article.Content}}</p> <br> <h2>3. 模板中自定义变量</h2> {{$title := .title}} {{$title}} <h2>4. 模板中循环遍历 range 模板中循环切片</h2> <ul> {{range $key,$val := .sliceList}} <li>{{$key}}---{{$val}}</li> {{end}} </ul> <h2>5. 模板中循环遍历 range 模板中循环 Map</h2> <ul> {{range $key,$val := .userinfo}} <li>{{$key}}---{{$val}}</li> {{end}} </ul> <h2>6. 模板中循环遍历结构体类型的切片</h2> <ul> {{range $key,$val := .articleList}} <li>{{$key}}---{{$val.Title}}---{{$val.Content}}</li> {{end}} </ul> <h2>7. 结构体类型的切片的另一种定义方式</h2> <ul> {{range $key,$val := .cmsList}} <li>{{$key}}---{{$val.Title}}</li> {{end}} </ul> <h2>8. 模板中的条件</h2> {{if .isLogin}} <p>isLogin等于true</p> {{end}} {{if .isHome}} <p>isHome等于true</p> {{else}} <p>isHome等于false</p> {{end}} <h2>9. if 语句条件判断 eq/ne/lt/le/gt/ge</h2> {{if gt .n1 .n2}} <p>n1大于n2</p> {{end}} {{if eq .n1 .n2}} <p>n1等于n2</p> {{else}} <p>n1不等于n2</p> {{end}} <h2>10. define 自定义模板</h2> {{define "a"}} <h4>这是一个自定义的代码块</h4> <p>111</p> {{end}} <div> {{template "a" .}} </div> <h2>11. 外部自定义模板</h2> {{template "/public/footer.html"}} </body> </html>
在 views 文件夹下新建 public 文件夹,然后新建 header.html 和 footer.html
header.html:
<h1>这是一个头部</h1>
footer.html:
<style> footer{ width: 100%; height: 60px; background: #000; text-align: center; color: #fff; } </style> <footer> <h1>这是一个底部</h1> </footer>
显示:
二、内置模板函数
在 controllers 文件夹下新建一个 article.go 文件:
package controllers import ( "github.com/astaxie/beego" "time" ) type ArticleController struct { beego.Controller } func (c *ArticleController) Get() { c.Data["title"] = "你好beego" now := time.Now() c.Data["now"] = now // 把日期渲染到模板上 c.TplName = "article.html" }
在 router.go 中添加路由:
package routers import ( "beegodemo03/controllers" "github.com/astaxie/beego" ) func init() { beego.Router("/", &controllers.MainController{}) beego.Router("/article", &controllers.ArticleController{}) }
views 文件夹下新建一个 article.html:
<!DOCTYPE html> <html lang="en" xmlns="http://www.w3.org/1999/html"> <head> <meta charset="UTF-8"> <title>文章</title> </head> <body> {{template "/public/header.html"}} <p>{{.now}}</p> <p>{{date .now "Y-m-d H:i:s"}}</p> {{template "/public/footer.html"}} </body> </html>
显示: