1.模板语法

最后更新于:2022-04-02 04:53:41

模板语法 go 统一使用了 {{ 和 }} 作为左右标签,没有其他的标签符号。 使用 . 来访问当前位置的上下文 使用 $ 来引用当前模板根级的上下文 使用 $var 来访问创建的变量 模板中支持的 go 语言符号 ~~~ {{"string"}} // 一般 string {{`raw string`}} // 原始 string {{'c'}} // byte {{print nil}} // nil 也被支持 ~~~ 基本语法代码: ~~~ |-- admin | |--controllers | `-- user.go ~~~ ~~~ package admin import ( "github.com/astaxie/beego" ) type UserController struct { beego.Controller } func (this *UserController) Index() { // if … else … end this.Data["if"] = true this.Data["else"] = "else" this.Data["elseif"] = false /* range … end 支持的类型为 array, slice, map, channel range 循环内部的 . 改变为以上类型的子元素 对应的值长度为 0 时,range 不会执行,. 不会改变 */ pages := []struct { Num int }{{10}, {20}, {30}} this.Data["Total"] = 100 this.Data["Pages"] = pages // with … end type stu struct { Name string Age int } this.Data["struct"] = &stu{Name: "Murphy", Age: 28} // define 可以用来定义自模板,可用于模块定义和模板嵌套 this.Data["define"] = "this is define" this.TplName = "admin/user/index.html" } ~~~ ~~~ |-- views | |--admin | |--user | `-- index.html ~~~ ~~~ Document this is view admin/user/index.html
语法 if … else … end :
{{if .if}} this if = true
{{end}} 嵌套的循环 :
{{if .if}} this if = true
{{if .else}} this else = "else" {{end}} {{end}}
else if 使用 : {{if .elseif}} this elseif = false {{else if .if}} this if = true
{{else}} else is ??? {{end}}
语法 range … end :
使用 .Num 输出子元素的 Num 属性,使用 $. 引用模板中的根级上下文 :
{{range .Pages}} {{.Num}} of {{$.Total}}
{{end}} 使用创建的变量,在这里和 go 中的 range 用法是相同的 :
{{range $index, $elem := .Pages}} {{$index}} - {{$elem.Num}} - {{.Num}} of {{$.Total}}
{{end}} range else :
{{range .Page}} {{.Num}}... {{else}} 当 .Pages 为空 或者 长度为 0 时会执行这里 {{end}}
语法 with … end :
with 用于重定向 :
{{with .struct}} ---{{.Name}} {{end}}
with 对变量赋值操作 :
{{with $value := "My name is %s"}} {{printf . "Murphy"}} {{end}}
with else : {{with .struct1}} this is with else true {{else}} this is with else false {{/* 当 pipeline 为空时会执行这里 */}} {{end}}
语法 define 用来定义自模板,可用于模块定义和模板嵌套 :
{{define "loop"}} define:
  • {{.define}}
  • {{end}} 语法 template 调用模板 :
      template:{{template "loop" .}}
    {{/* comment content support new line */}} ~~~ 浏览器访问: http://127.0.0.1:8080/admin/user/index 浏览器返回: ~~~ this is view admin/user/index.html 语法 if … else … end : this if = true 嵌套的循环 : this if = true this else = "else" else if 使用 : this if = true 语法 range … end : 使用 .Num 输出子元素的 Num 属性,使用 $. 引用模板中的根级上下文 : 10 of 100 20 of 100 30 of 100 使用创建的变量,在这里和 go 中的 range 用法是相同的 : 0 - 10 - 10 of 100 1 - 20 - 20 of 100 2 - 30 - 30 of 100 range else : 当 .Pages 为空 或者 长度为 0 时会执行这里 语法 with … end : with 用于重定向 : ---Murphy with 对变量赋值操作 : My name is Murphy with else : this is with else false 语法 define 用来定义自模板,可用于模块定义和模板嵌套 : 语法 template 调用模板 : template: define: this is define ~~~
    ';