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 调用模板 :
';
语法 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:
-
template:{{template "loop" .}}