模板语法
介绍:双层大括号 {{ }}
是默认的模板界定符,用于在 HTML 模板文件中界定模板语法。
模板语法都包含在 {{
和 }}
中间。
{{ . }} 语句
{{ . }}
中的点表示当前对象。
传入结构体时,使用 .
访问结构体对应的字段;传入 map 时,使用 .
和 key 来取值。
with 关键字
{{ with pipeline }} T1 {{ end }}
如果 pipeline 为空则不产生输出,否则将
.
设为 pipeline 的值并执行 T1,不修改外面的.
{{ with pipeline }} T1 {{ else }} T0 {{ end }}
如果 pipeline 为空则不改变
.
并执行 T0,否则.
设为 pipeline 的值并执行 T1
with 区块外,{{ . }}
代表传入模板的数据,而在 with 区块内,则代表 pipeline 里的数据,如 {{ with .Errors.title }}
这个区块内, {{ . }}
代表 .Errors.title
。
pipeline
pipeline
是指产生数据的操作。比如 {{ . }}
、{{ .Name }}
等。
Go 的模板语法支持使用管道符号 |
连接多个命令,用法和 Unix 下的管道类似 - |
前面的命令会将运算结果(或返回值)传递给后一个命令的最后一个位置。
※ 注意: 并不是只有使用了 | 才是 pipeline。Go 的模板中,pipeline 的概念是传递数据,只要能产生数据的,都是 pipeline。
其他模板语法
注释
{{/* 注释 */}}
变量
$variable := {{ . }}
移除空格
移除空格: {{- .Name -}}
{{-
- 移除模板内容左侧的所有空白符号。
-}}
- 移除模板内容右侧的所有空白符号。
条件判断
{{ if pipeline }} T1 {{ end }}
{{ if pipeline }} T1 {{ else }} T0 {{ end }}
{{ if pipeline }} T1 {{ else if pipeline }} T0 {{ end }}
range 遍历
range
关键字用以在模板里遍历数据, pipeline
的值必须是数组、切片、字典或者通道。
两种写法:
{{ range pipeline }} T1 {{ end }}
如果 pipeline 的值其长度为 0,不会有任何输出
{{ range pipeline }} T1 {{ else }} T0 {{ end }}
如果 pipeline 的值其长度为 0,则会执行 T0
修改默认的标识符
如遇到与其他模板采用相同的标识符 {{}}
,可以修改标识符。
template.New("test").Delims("{[","]}").ParseFiles("filename.gohtml)
比较函数
eq 如果arg1 == arg2则返回真
ne 如果arg1 != arg2则返回真
lt 如果arg1 < arg2则返回真
le 如果arg1 <= arg2则返回真
gt 如果arg1 > arg2则返回真
ge 如果arg1 >= arg2则返回真
为了简化多参数相等检测,eq(只有eq)可以接受2个或更多个参数,它会将第一个参数和其余参数依次比较,返回下式的结果:
{{eq arg1 arg2 arg3}}
解析模板
tmpl.Execute(wr io.Writer, data interface{}) error {}
wr
:响应对象data
:返回的响应数据
tmpl.ExecuteTemplate(wr io.Writer, name stirng, data interface{}) error {}
wr
:响应对象name
:模板名称,define
定义的模板名称,不是文件名data
:返回的响应数据