当前位置: 首页 > 工具软件 > Revel > 使用案例 >

Revel模板引擎Template基本语法

陈畅
2023-12-01
  • 注释
{{/* 注释 */}}
  • 变量渲染
{{.Name}}
  • 定义局部变量
//go模板,with语句就是创建一个封闭的作用域
{{with "world"}}
    {{.}}
{{end}}
  • 定义子模板
{{define "header"}}
    <div>title</div>
{{end}}
//使用子模板
{{template "header"}}
  • 管道函数

用法1:

//调用一个无参的函数,类似function()
{{FuncName}}

用法2:

//调用一个有参的函数,类似split(str,",")
{{split .str "," }}

用法3:
将竖线“|”左边的变量值作为函数参数传送

//调用一个有参的函数,类似trim(str)
{{.str | trim }}
//调用多个函数
{{.str | trim | len}}
  • 条件判断
{{if condition}}
//...
{{else}}
//...
{{end}}

【技巧】如果需要去除空行,则需要使用以下方法

{{- if condition}}
//...
{{- else}}
//...
{{- end}}
  • 遍历

用法一:

{{range $key,$value := .Lists }}
    //{{$key}} => {{$value}}
{{end}}

用法二:

{{range .Lists }}
    //{{.}}
{{end}}

用法三:

{{range .var}}
    //{{.}}
{{else}}
    //没有可遍历的值时,则执行else 
{{end}}
  • 嵌入子模板
{{template "header.html"}}
//向子模板传值
{{template "header.html" .}}

预定义的模板全局函数

  • and
    {{and x y}}
    //等同于Golang中的:x and y
    
  • or
{{or x y}}
//等同于Golang中的:x || y
  • call

    //call 第一个参数必须是一个函数,其余参数作为该函数的参数
    {{call add 1 2}}
    
  • html
    转义文本中的html标签,如将“<”转义为“<”,“>”转义为“>”等

  • index
    返回index后面的第一个参数的某个索引对应的元素值,其余的参数为索引值

    {{index .array 1 2 3}}
    //表示:array[1][2][3]
    //array必须是一个map、slice或数组
    
  • js
    返回用JavaScript的escape(编码)处理后的文本

  • len
    返回参数的长度值(int类型)

  • not
    返回参数的否定值(bool类型)

  • print
    fmt.Sprint的别名

  • printf
    fmt.Sprintf的别名

  • println
    fmt.Sprintln的别名

  • urlquery
    url参数编码

Revel函数

  • append
    向数组添加变量或创建数组

    {{append . "moreScripts" "js/jquery-ui-1.7.2.custom.min.js"}}
    
    {{range .moreStyles}}
        <link rel="stylesheet" type="text/css" href="/public/{{.}}">
    {{end}}
    
  • checkbox
    帮助构造HTML复选框输入元素,例如:

    {{with $checkboxField := field "testField" .}}
        {{checkbox $checkboxField "someValue"}}
    {{end}}
    
  • date, datetime, timeago
    根据应用程序设置的默认日期和时间格式格式化日期。

    {{date .MyDate}}
    {{datetime .MyDateTime}}
    
  • even 取余,N % 2 == 0 这是一个方便表格行着色的函数。

    {{range $index, $element := .results}}
    <tr class="{{if even $index}}light-row{{else}}dark-row{{end}}">
        //...
    </tr>
    {{end}}
    
  • field
    输入字段的助手函数
    给定一个字段名,它返回一个包含以下成员的结构:
    Id: 字段名,已转换为适合作为HTML元素ID。
    Name: 字段名
    Value: 当前ViewArgs字段的值
    Options:当前ViewArgs选项列表
    Flash: 字段的flash值.
    Error: 有与此字段关联的错误信息
    ErrorClass: 原始字符串“haserror”, 如果有错误时显示此样式, 否则为 ""

    {{with $field := field "booking.CheckInDate" .}}
        <p class="{{$field.ErrorClass}}">
        <strong>Check In Date:</strong>
        <input type="text" size="10" name="{{$field.Name}}"
                class="datepicker" value="{{$field.Flash}}"> *
        <span class="error">{{$field.Error}}</span>
        </p>
    {{end}}
    

    选项列表可以使用闪存来设置选项

    c.ViewArgs["options"] = map[string][]string{
    		"record.Status": map[string][]string{"Started","Ongoing", "Finished"},
    }
    
  • i18ntemplate

  • msg

  • nl2br
    将换行符转换为HTML换行符。

    <div class="comment">{{nl2br .commentText}}</div>
    
  • option
    构造HTML option 标签的助手函数

    {{with $field := field "booking.Beds" .}}
    <select name="{{$field.Name}}">
        {{option $field "1" "One king-size bed"}}
        {{option $field "2" "Two double beds"}}
        {{option $field "3" "Three beds"}}
    </select>
    {{end}}
    
  • pad 在给定的字符串上加上空格字符" "

    {{pad "my string", 8}}
    
  • pluralize 正确复数单词的助手函数。

    There are {{.numComments}} comment{{pluralize (len comments) "" "s"}}
    
  • radio 构造HTML Radio元素,例如:

    {{with $field := field "booking.Smoking" .}}
        {{radio $field "true"}} Smoking
        {{radio $field "false"}} Non smoking
    {{end}}
    
  • raw
    打印未编码的原始文本。

    <div class="body">{{raw .blogBody}}</div>
    
  • set 设置变量内容

    {{set . "title" "Basic Chat room"}}
    <h1>{{.title}}</h1>
    
  • SLUG 创建一个slug

{{slug "SomeThing String"}}
  • url
    根据Controller.Method解析路由地址

    <a href="{{url "MyApp.ContactPage"}}">Contact</a>  
    Click <a href="{{url "Products.ShowProduct" 123}}">here</a> for more.
    
  • 自定义函数

布尔函数

  • 【eq】 返回表达式“arg1 == arg2”的布尔值
{{eq arg1 arg2 arg3 arg4}}
//eq只接受两个参数进行比较,对于简单的多路相等测试,后面其它的参数将分别依次与第一个参数进行比较
//相当于:arg1==arg2 || arg1==arg3 || arg1==arg4 ...
  • 【ne】 返回表达式“arg1 != arg2”的布尔值
  • 【lt】 返回表达式“arg1 < arg2”的布尔值
  • 【le】 返回表达式“arg1 <= arg2”的布尔值
  • 【gt】 返回表达式“arg1 > arg2”的布尔值
  • 【ge】 返回表达式“arg1 >= arg2”的布尔值
 类似资料: