基本语法

基本语法

模板引擎默认使用了 和 作为左右闭合标签,开发者可通过gview.SetDelimiters方法设置自定义的模板闭合标签。

使用 . 来访问当前对象的值(模板全局变量)。

使用 $ 来引用当前模板根级的上下文。

使用 $var 来访问特定的模板变量。

模板中支持的 go 语言符号

`"string"`     // 一般 string
``raw string`` // 原始 string
`'c'`          // byte
`print nil`    // nil 也被支持

模板中的 pipeline

可以是上下文的变量输出,也可以是函数通过管道传递的返回值

`. | FuncA | FuncB | FuncC`

当pipeline的值等于:

  • false或0
  • nil的指针或interface
  • 长度为0的array, slice, map, string

那么这个pipeline被认为是空。

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支持的类型为array, slice, map, channel。

注意:在range循环内部,. 被覆盖为以上类型的子元素。

此外,对应的值长度为0时,range不会执行,. 不会改变。

with … end

`with pipeline`...`end`

with用于重定向pipeline

`with .Field.NestField.SubField`
    `.Var`
`end`

define

define可以用来定义自模板(给一段模板内容定义一个模板名称),可用于模块定义和模板嵌套(使用在template标签中)。

`define "loop"`
    <li>`.Name`</li>
`end`

使用 template 调用模板

<ul>
    `range .Items`
        `template "loop" .`
    `end`
</ul>

template

`template "模板名称" pipeline`

将对应的上下文pipeline传给模板,才可以在模板中调用。

注意:template标签参数为模板名称,而不是模板文件路径,template标签不支持模板文件路径。

include

该标签为gf模板引擎新增标签

`include "模板文件名(需要带完整文件名后缀)" pipeline`

在模板中可以使用include标签载入其他模板,并且使用当前模板引擎已有的数据对于模板的分模块处理很有用处。模板文件名支持相对路径 以及文件的系统绝对路径 。如果想要把当前模板的模板变量传递给子模板(嵌套模板),可以这样:

`include "模板文件名(需要带完整文件名后缀)" .`

与template标签的区别是:include仅支持文件路径 ,不支持模板名称 ;而tempalte标签仅支持模板名称 ,不支持文件路径 。

注释

允许多行文本注释,不允许嵌套。

`/*
comment content
support new line
*/`