go语言web开发13 - beego模板里的基本函数、内置函数与自定义函数使用
一、基本函数
1.1、输出系列函数
(1)print:输出
{{print "tool.uxuan.cc"}} --> 返回字符串"tool.uxuan.cc"和{{"tool.uxuan.cc"}}效果一样。
(2)printf:格式化输出
{{.name|printf "%s"}} --> 格式化输出,和fmt.Printf("%s",name)效果一样。
(3)println:输出行
{{println "tool.uxuan.cc"}} --> 结果同{{print "tool.uxuan.cc"}}一样。
(4)优先级:在()括号里的被认为是一个整体(优先执行)
{{printf "%d, %d" (printf "%d-%d" 2 4) 6}} --> 得到结果为:2-4, 6
1.2、and与or
(1)and:从左往右会逐一判断每个参数,只要有一个为空就返回第一个为空的参数,如果参数都不为空就返回最后一个参数
{{and .a .b .c}} --> 从左往右会逐一判断每个参数,只要有一个为空就返回第一个为空的参数,如果参数都不为空就返回最后一个参数
(2)or:和and结果正相反
{{or .a .b .c}} --> 从左往右会逐一判断每个参数,只要有一个不为空就返回第一个不为空的参数,如果参数都为空就返回最后一个参数
1.3、call:回掉函数
- call方法可以调用后端传过来的函数,call方法调用函数的时候也可以给函数传值。
- call调用的函数需要有一个或两个返回值,返回两个值时,第二个值用于返回error类型的错误,第二个返回值不等于nil时,执行终止。
(1)示例一:调用没有参数的函数
(1)定义函数 func Test() string { return "hello" } (2)后端将函数传给模板 func (t *TemplateController) Get() { t.Data["func_test"] = Test --> 传函数名即可,不用() t.TplName = "test_template.html" } (3)模板里使用call调用函数 {{call .func_test}}
(2)示例二:调用需要传参的函数
(1)定义函数内容如下 func Test(name) string { str_hell := fmt.Sprintf("hell",name) return str_hell } (2)后端将函数传递给模板 func (t *TemplateController) Get() { t.Data["func_test"] = Test --> 传函数名即可,不用() t.TplName = "test_template.html" } (3)模板里使用call调用函数时传参 {{call .func_test "优选工具"}} --> "优选工具"是call调用.func_test时传的参数
1.4、index:读取指定类型下标对应的值
index支持的类型有:map,slice,array,string,示例如下:
(1)map类型示例
{{index .map_data "name"}} --> 读取后端传过来的map类型数据里"name"这个key对应的值
(2)切片和数组类型示例
{{index .arrs_data 1 }} --> 读取后端传过来的切片或者数组类型数据里下标是1的值
(3)字符串类型示例
{{index .str_data 2}} --> 读取后端传过来的字符串类型数据里下标是2的值并以ascll的形式展示(只有字符串类型的数据会以ascll码的形式展示)
1.5、len与not
(1)len:获取元素长度(支持类型:map、slice、array、string、chan)
{{.str_data|len}} --> 结果是str_data的长度
(2)not:取反
{{not .is_true}} --> 后端传过来的是true模板里用not就获取到false,传过来的是false用not就获取到true {{not 0}} --> 0对应布尔值false,1对应布尔值true,取反此时就获取到了true
1.6、urlquery:将URL中的特殊字符转换为16进制的字节码
有些符号在URL中是不能直接传递的,如果要在URL中传递这些特殊符号,那么就要使用他们的编码了,示例如下:
{{urlquery "http://www.baidu.com"}} --> 此时获取到的结果为:http%3A%2F%2fwww.baidu.com(如果需要将URL当成参数传递的话就需要进行编码处理)
二、内置函数
2.1、dateformat:时间格式化
{{dateformat .now_time "2006-01-02 15:04:05"}} --> 将后端传过来的 “当前时间变量(参数2)” 格式化为指定的格式(参数3的格式,注意,参数3的时间格式必须要时示例里的时间,不能变) {{dateformat .now_time "2006/01/02 15:04:05"}}
说明:
- dateformat:关键字。
- .now_time:后端传过来的当前时间变量。
- "2006-01-02 15:04:05":时间格式化的格式(里面的日期一定不要变,格式可以变)。
2.2、date:时间格式化(根据字符串返回时间)
{{date .now_time "Y-m-d H:i:s"}}
参数说明:
- Y:年,四位数字,如:“1999”
- y:年,两位数字,如:“99”
- m:月份,二位数字,若不足两位则在前面补零,如:”01“
- M:月份,三位英文字母,如:jan
- d:日,两位数字,若不足两位则在前面补零,如:”01“
- D:星期几,三位英文字母,如:fri
- H:24小时的小时,如:”00“-”23“
- h:12小时的小时,如:”01“-”12“
- i:分钟,如”00“-“59”
- I:星期几,英文全名,如:”Friday“
- s:秒,如”00“-”59“
- S:字尾加英文序数,两个英文字母,如:”th“,"nd"
2.3、compare:实现了两个对象的比较,如果相同返回true,否则返回false
{{compare .a .b}} {{cpmpare 89 99}} --> false {{compare 'a' 97}} --> true,字节类型的数据他会先转换为ascll码后再比较
2.4、compare_not:两个对象比较,如果相同返回true然后取反,否则返回false然后取反
{{compare_not 89 99}} --> true {{compare_not 'a' 97}} --> false,字节类型的数据他会先转换为ascll码后再比较然后再取反
2.5、not_nil:判断是不是为空,如果为空则返回false,不为空则返回true
{{not_nil 0}} --> 结果为true,0是一个int类型的值(不为空) {{not_nil nil}} --> 结果false
2.6、not_null:和not_nil一样的效果(判断是不是为空,如果为空则返回false,不为空则返回true)
2.7、substr:字符串截取
{{substr "abcdefghijk" 0 3}} --> 结果:abc,截取字符串下标是0-2的内容(顾头不顾尾)
2.8、html2str:把html转化为字符串,剔除了一些scripts、css之类的元素,返回纯文本
{{html2str "<a href='http://tool.uxuan.cc/'>我的网站</a>"}} --> 得到结果:字符串"我的网站",html的部分都给去掉了
2.9、str2html:把字符串转化为html
{{str2html "<a href='http://tool.uxuan.cc/'>我的网站</a>"}} --> 展示的结果实现了html的功能
2.10、htmlquote:转译html
{{htmlquote "<a href='http://tool.uxuan.cc/'>我的网站</a>"}} --> 得到结果:<a href='http://tool.uxuan.cc/'>我的网站</a>
2.11、htmlunquote:将htmlquote转译后的html转换成html展示
{{htmlunquote "<a href='http://tool.uxuan.cc/'>我的网站</a>"}} --> 得到结果:<a href='http://tool.uxuan.cc/'>我的网站</a>
2.12、assets_js:自动生成引用js标签
{{assets_js "/static/js/xx.js"}} --> 得到<script src="/static/js/xx.js"></script>
2.13、assets_css:自动生成引用css标签
{{assets_css "/static/css/xx.css"}} --> 的到标签:<link href="/static/css/xx.css" rel="stylesheet">
2.14、config:获取app.conf里的值,使用方法{{config configType configKey defaultValue}},可选的configType有:String、Bool、Int、Int64、Float、DIY(ConfigType首字母必须大写)
{{config "String" "httpport" "默认值,没获取到"}}
说明:
- cofig:关键字。
- 第一个参数:获取参数的类型。
- 第二个参数:获取配置文件里的变量名。
- 第三个参数:默认值。
2.15、map_get:获取map的值
{{map_get .map_data "name"}} --> 获取map_data里key是name的值
2.16、urlfor:反转url(根据Controller获取Url路径)
1、反转没有参数的url {{urlfor "LoginController.Get"}} --> 获取get方法LoginController对应的url路径,结果:/login 2、反转有参数的url {{urlfor "LoginController.Get" "name" "张三" "age" "18"}} --> 获取get方法LoginController对应的url路径(有参数),结果:/login?name=张三&age=18
三、自定义函数
3.1、自定义函数实现的两种方式
方式一:
func Hello(hi string) (new_hi string) { --> 返回值的方式一 new_hi = hi + ",你好" return }
方式二:
func Hello(hi string) string { --> 返回的方式二 new_hi := hi + ",你好" return new_hi }
上面两种方式就是返回值的方式不同,选择一种使用即可。
3.2、注册自定义函数
在main.go文件里,beego.Run()上方添加如下配置注册自定义函数。
beego.AddFuncMap("hi", controllers.Hello) // 第一个值是模板里调用自定义函数的名称,第二个值是我们写的自定义函数名(不要写())
3.3、模板里使用自定义函数
{{.name|hi}} --> 得到结果:Dream,你好
{{hi .name}} --> 得到结果:Dream,你好
上面的两种使用方法都支持。