模板引擎-模板标签
模板引擎默认使用了 和 作为左右闭合标签,开发者可通过 gview.SetDelimiters 方法设置自定义的模板闭合标签。
使用 . 来访问当前对象的值(模板局部变量)。
使用 $ 来引用当前模板根级的上下文(模板全局变量)。
使用 $var 来访问特定的模板变量。
模板中支持的go 语言符号
`"string"` // 一般 string
``raw string`` // 原始 string
`'c'` // byte
`print nil` // nil 也被支持
模板中的pipeline
可以是上下文的变量输出,也可以是函数通过管道传递的返回值
`. | FuncA | FuncB | FuncC`
当 pipeline 的值等于:
false或0nil的指针或interface- 长度为
0的array,slice,map,string
那么这个 pipeline 被认为是空。
注意
需要注意:在 gf 模板引擎中,当模板中展示的指定变量不存在时,将会显示为空(标准库模板引擎会展示 <no value>)。
if … else … end
`if pipeline`...`end`
if 判断时, pipeline 为空时,相当于判断为 false。
支持嵌套的循环
`if .condition`
...
`else`
`if .condition2`
...
`end`
`end`
也可以使用 else if 进行
`if .condition`
...
`else if .condition2`
...
`else`
...
`end`
range … end
`range pipeline` `.` `end`
pipeline 支持的类型为 slice, map, channel。
注意:在 range 循环内部, . 符号会被覆盖为以上类型的子元素(局部变量)。如果想在循环中访问外部变量(全局变量),请加上 $ 符号,如: $.Session.Name
此外,对应的值长度为 0 时, range 不会执行, . 不会改变。
例如,遍历 map:
`range $key, $value := .MapContent`
`$key`:`$value`
`end`
例如,遍历 slice:
`range $index, $elem := .SliceContent`
`range $key, $value := $elem`
`$key`:`$value`
`end`
`end`
with … end
`with pipeline`...`end`
with 用于重定向 pipeline
`with .Field.NestField.SubField`
`.Var`
`end`
define
define 可以用来 自定义模板内容块(给一段模板内容定义一个模板名称),可用于模块定义和模板嵌套(使用在 template 标签中)。
`define "loop"`
<li>`.Name`</li>
`end`
其中 loop 为该模板内容块的名称,随后可使用 template 标签调用模板:
<ul>
`range .Items`
`template "loop" .`
`end`
</ul>
注意
define 标签需要结合 template 标签一起使用,并且支持跨模板使用(在同一模板目录/子目录下有效,原理是使用的 ParseFiles 方法解析模板文件)。
template
`template "模板名称" pipeline`
将对应的上下文 pipeline 传给模板,才可以在模板中调用。
注意: template 标签参数为 模板名称,而不是模板文件路径, template 标签不支持模板文件路径。
注意
template 标签需要结合 define 标签一起使用,并且支持跨模板使用(在同一模板目录/子目录下有效,原理是使用的 ParseFiles 方法解析模板文件)。
include
该标签为gf 框架模板引擎新增标签
`include "模板文件名(需要带完整文件名后缀)" pipeline`
在模板中可以使用 include 标签载入其他模板(任意路径),模板文件名支持 相对路径 以及文件的系统 绝对路径 。如果想要把当前模板的模板变量传递给子模板(嵌套模板),可以这样:
`include "模板文件名(需要带完整文件名后缀)" .`
与 template 标签的区别是: include 仅支持 文件路径 ,不支持 模板名称 ;而 tempalte 标签仅支持 模板名称 ,不支持 文件路径 。
注释
允许多行文本注释,不允许嵌套。
`/*
comment content
support new line
*/`
删除空白符号
删除移除空格换行符
## 使用`-语法去除模板内容左侧的所有空白符号, 使用-`去除模板内容右侧的所有空白符号。
## 注意:-要紧挨`和`,同时与模板值之间需要使用空格分隔。
`- .Name -`
`- range $key, $value := .list`
“`$value`”
`- end`
