Golang template
使用方法
解析模版建议在初始化时加载一次,否则每次调用时都加载会比较浪费性能
tmpl, err := template.New("name").Parse(...)
err = tmpl.Execute(out, data)
t, err := template.New("foo").Parse(`{{define "T"}}Hello, {{.}}!{{end}}`)
err = t.ExecuteTemplate(out, "T", "<script>alert('you have been pwned')</script>")
ExecuteTemplate定义的name,为模版名称
给模版传入参数
(*.template).Execute(out, data)
data 为穿进模版的参数
给模版传入方法
(*template).Funcs(funcMap)
加载模版
匹配模式
(*.template).ParseGlob
文件名模式
(*.template).ParseFiles
字符串
(*,template).Parse("")
转译
html转译
HTMLEscaper
javascript转译
JSEscapeString
url转译
URLQueryEscaper
模版语法
更换模版匹配符号
(*template).Delims("{{", "}}")
默认是"{{}}",但是会在vue中存在冲突
定义模版名称
{{define "index"}}
插入模版
{{template "index" .}} 此时的.插入当前上下文
去除空白符
{{- .Comment -}} 去掉前面的空白和后面的空白
定义变量
{{$admpub}}
局部变量
{{with pipeline}}
...
{{end}}
上下文
{{.}}指向当前上下文
方法调用
{{ . | funcname }}
{{"str" | out "%s"}} -> out("%s", "str")
预定义函数
and
{{and x y}} -> if x then y else x 如果x为真返回y,否则返回x
not 取反
or {{or x y}} -> if x then x else y
call {{call func 1 2}} -> func(1, 2)
html js urlquery 转译文本escape
index {{index x 1}} -> x[1]
print printf println 等同于golang对应函数名
len 等同于golang的len函数
遍历
{{range $Item := .Table.Items}}
...
{{.}} 此时上下文已经切换到 $Item
{{end}}
{{range .Var}}
{{.}}
{{end}}
{{range pipeline}}
...
{{else}}
...
{{end}}
if
{{if .IsNormal}}...{{else if}} ...{{else}}...{{end}}------------------------eq == ne !=lt < le <=gt >ge >=
printf
{{printf "%s" .Body}}
输出内容
网友评论