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>"}}  --> 得到结果:&lta&nbsp;href=&#39;http://tool.uxuan.cc/&#39;&gt我的网站&lt;/a&gt;

 

2.11、htmlunquote:将htmlquote转译后的html转换成html展示

{{htmlunquote "&lta&nbsp;href=&#39;http://tool.uxuan.cc/&#39;&gt我的网站&lt;/a&gt;"}}   --> 得到结果:<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,你好

上面的两种使用方法都支持。

 

posted @ 2020-09-10 13:21  欧-阳  阅读(447)  评论(0)    收藏  举报