5

常用模板操作 + 乱炖,持续更新中 ...

模板admin2977 次浏览

1、使用刀符 $ 访问全局变量,后面一种可以简化代码,省去了临时变量的定义

{{$user := .user}}
{{range .bookings}}
      {{$user.Name}}
{{end}}

或(推荐)

{{range .bookings}}
      {{$.user.Name}}
{{end}}

2、在循环中使用计数

 {{range $index, $book := .books}}
      {{$index}} {{$book}}
 {{end}}

3、and or not,if else

{{if and false false}}<h1>It works!</h1>{{end}}
{{if or false false}}<h1>It works!</h1>{{end}}
{{if not false}}<h1>It works!</h1>{{end}}

{{if false}}<h1>It works!</h1>{{else if true}}oh yeah{{end}}

4、len 返回对象长度

{{len .bookings}}

5、urlquery转义

{{urlquery "http://golang.org"}}

6、巧用$.errors,服务端校验出错后,带回字段信息

{{with $field := field "category.Name" .}}
<input type="text" value="{{if $.errors}}{{$field.Flash}}{{else}}{{$field.Value}}{{end}}">
{{end}}

7、index,取回对象中的某个元素,支持array、map 、slice、string。

{{$book := index .bookings 0}}
{{$value := index .map “key”}}

8、比较

==    {{eq 0 1}}
!=    {{ne 0 1}}
<     {{lt 0 1}}
<=    {{le 0 1}}
>     {{gt 0 1}}
>=    {{ge 0 1}}

9、HTML 转义 ,比如将“<”改成“&lt”。 

{{. | html}}

10、pad,生成指定长度空格 &nbsp;

{{pad "" 4}}

11、printf,格式化小数

{{printf "%.2f" 100.1234}}

12、输出原生HTML

{{raw .html}}

13、巧用 c.Validation.Errors[0].Message ,简化代码书写

多个验证,出错后,只需要返回一个错误给前端,可以这样写:

c.Validation.Required(v1).Message("错误1")
c.Validation.Required(v2).Message("错误2")
c.Validation.Required(v3).Message("错误3")
if c.Validation.HasErrors() {
    return c.RenderText(c.Validation.Errors[0].Message)
}

14、自定义验证错误

1、
vError := &revel.ValidationError{
	Message: "密码错误",
	Key:     "password",
}

c.Validation.Errors = append(c.Validation.Errors, vError)


2、
vError := &revel.ValidationError{"错误的名称", "category.name"}
v.Errors = append(v.Errors, vError)

3、
vError := &revel.ValidationError{"错误的名称", ""}
v.Errors = append(v.Errors, vError)

 

 

 

 

共5个回复
jov 回复

如何做字符串的截取呢?我在做个blog系统,需要把标题和内容的长度做截取,有什么办法吗?

kevin 回复

给你的模型加个方法,直接在模板中调用。

比如Blog struct

func (b Blog) TruncContent() string{

        return b.Content[:80]        

}

jov 回复

恩,真是一个好想法,我没想到,我又加了一个两个作为截取变量,不过你这个真心不错。

另外一个问题:在页面上range遍历的时候,index有办法做+操作吗?我想用这个 index作为楼层显示,但是它是从0开始的,这让我很不爽啊。

kevin 回复

这个要用自定义模板函数了,文档最后有定义方法,

http://gorevel.cn/docs/manual/templates.html

jov 回复

nice!