模板标签

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

    使用 $ 来引用当前模板根级的上下文(模板全局变量)。

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

    模板中支持的 go 语言符号

    模板中的 pipeline

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

    1. {{. | FuncA | FuncB | FuncC}}

    pipeline的值等于:

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

    那么这个pipeline被认为是空。

    1. {{if pipeline}}...{{end}}

    if判断时,pipeline为空时,相当于判断为false

    支持嵌套的循环

    1. {{if .condition}}
    2. ...
    3. {{if .condition2}}
    4. ...
    5. {{end}}
    6. {{end}}

    也可以使用进行

    1. {{if .condition}}
    2. ...
    3. {{else if .condition2}}
    4. ...
    5. {{else}}
    6. ...
    7. {{end}}

    range … end

    pipeline支持的类型为slice, map, channel

    注意:在range循环内部,. 符号会被覆盖为以上类型的子元素(局部变量)。如果想在循环中访问外部变量(全局变量),请加上$符号,如:{{$.Session.Name}}

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

    例如,遍历map:

    1. {{range $key, $value := .MapContent}}
    2. {{$key}}:{{$value}}
    3. {{end}}

    例如,遍历slice:

    1. {{range $key, $value := $elem}}
    2. {{$key}}:{{$value}}
    3. {{end}}
    4. {{end}}
    1. {{with pipeline}}...{{end}}
    1. {{with .Field.NestField.SubField}}
    2. {{.Var}}
    3. {{end}}

    define

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

    其中loop为该模板内容块的名称,随后可使用 template 标签调用模板:

    1. <ul>
    2. {{range .Items}}
    3. {{template "loop" .}}
    4. {{end}}
    5. </ul>
    1. {{template "模板名称" pipeline}}

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

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

    include

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

      在模板中可以使用include标签载入其他模板(任意路径),模板文件名支持相对路径以及文件的系统绝对路径。如果想要把当前模板的模板变量传递给子模板(嵌套模板),可以这样:

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

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