• Beego模板 循环和判断几个例子


    Beego模板 循环和判断几个例子

    Beego的前端几乎是另一种语言。一些循环、判断,不细看文档真的做不出来。

    0. Beego的View模板语法规则:

    beego前端(view)统一使用了 {{ 和 }} 作为左右标签,没有其他的标签符号。

    使用 . 来访问当前位置的上下文;

    使用 $ 来引用当前模板根级的上下文;

    使用 $var 来访问创建的变量。

    1. 循环 range … end

    可以接受slice, map, channel。貌似map、slice混在一起的比较多,甚至有时候会是一个json串的。

    例子1(slice):

    controller送来的数据:

    [map[contnum:LvL-2015-001 id:2] map[contnum:LvL-2015-002 id:10] map[id:3 contnum:LvL-2015-003] map[contnum:LvL-2015-004 id:5] map[contractnum:LvL-2015-005 id:1]]
    view端接受比较舒服:

    {{range .ContNumAll}}
    <option value="{{.contnum}}">{{.contnum}}</option>
    {{end}}

    例子2(map):

    controller送来的数据是一个Json串,比如:

    map[data:[map[Id:564b044c164d6b366f64390a Name:IBM] map[Id:564b044c164d6b366f64390c Name:DELL] map[Id:564b0458164d6b366f6439c9 Name:HP]]]
    Controller里面最好先处理一下:

    this.Data["DeviceBrandMap"] = DeviceBrandMap["data"]
    view里面比例子1稍微复杂点儿:

    {{range $ind, $elem := .DeviceBrandMap0}}
    <option value="{{$elem.Name}}">{{$elem.Name}}</option>
    {{end}}
    map是个键值对,没错吧?所以需要用两个值接收,对吧?

    例子3(更复杂的map,条件判断):

    controller送来的一个Json串,比如:

    map[data:[map[email: fax: name:XX网 province:北京市 provinceid:1 statid:0 type: _id:564b04cb164d6b366f644280 website: updateuser:管理员 district:朝阳区 phone:01088888888 updatetime:2015-10-10 10:10:10 addr: districtid:9 note: postcode: typeid:1 dictKey:cmdb-dict-company id:78 dict_key:]
    ......]]
    需要过滤,当且仅当 typeid为1的时候,取name的值。也还好说,每次加个判断好了。

    {{range $ind, $elem := .ManufacturerMap}}
    {{if eq $elem.typeid "1"}}
    <option value="{{$elem.name}}">{{$elem.name}}</option>
    {{end}}
    {{end}}

    2. 判断 if ... else ... end

    2.1 语法:{{if pipeline}}{{end}}
    if 判断时,pipeline 为空时,相当于判断为 False

    this.Data["IsLogged"] = true
    this.Data["IsHomePage"] = true
    this.Data["IsPayed"] = false
    支持嵌套的循环

    {{if .IsHomePage}}
    {{else}}
    {{if .IsPayed}}{{end}}
    {{end}}
    也可以使用 else if 进行

    {{if .IsHome}}
    {{else if .IsAbout}}
    {{else}}
    {{end}}


    本没必要说什么,奈何判断语法比较“独特”。

    2.2 eq / ne / lt / le / gt / ge 这些都是函数!

    这类函数一般配合在 if 中使用,望文生义即可。

    既然是函数,那么用法就是 eq .var1 $var2 或者 eq .var1 .var2,总之一句话,用来比较的几个变量要放在 这六个 函数 的后面。否则,报错没商量!

    例子4(简单比较):

    {{if eq .sort 0}}
    // something your function likes...
    {{else if eq .name "IBM"}}
    // something your function likes...
    {{else}}
    // something your function like...
    {{end}}
    看到了吧?数字(整数、浮点数)都可以直接比较值;字符串必须用双引号!必须用双引号!必须用双引号!重要的事情说三遍!!!否则报错没商量。

    2.3 特殊的eq函数

    eq 和其他函数不一样的地方是,支持多个参数,和下面的逻辑判断相同

    arg1==arg2 || arg1==arg3 || arg1==arg4 ...
    记住:只有eq一个函数可以这样!其它五个函数都不可以。
    与 if 一起使用

    {{if eq true .Var1 .Var2 .Var3}}{{end}}
    如果想处理一个逻辑——不是A也不是B也不是C,能用ne吗?绝对不行!

    例子4(not和eq):

    {{range $ind, $elem := .DeviceModalMap}}
    {{ if not (eq $elem.Name "未知" "unknown" "unknow")}}
    <option value="{{$elem.Name}}">{{$elem.Name}}</option>
    {{end}}
    {{end}}
    not只能否定一个变量或者表达式,所以eq 函数和函数入口参数要用括号括起来。汉语字符串也是可以被支持的。

    猫哥语:以上来自真实项目,代码都通过。因初学乍练,难免有不足之处,欢迎指正。
    ————————————————
    版权声明:本文为CSDN博主「9命怪猫」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/972301/article/details/50055573

  • 相关阅读:
    【Go】windows下搭建go语言编译环境
    【java回调】同步/异步回调机制的原理和使用方法
    【tomcat】tomcat远程调试
    【tomcat】获取访问者真实IP
    【深度学习学习记录】之一:开篇闲扯一些话
    【java】线程安全的整型类AtomicInteger
    【OpenStack】源码级深入了解删除虚拟机操作
    【Maven】maven的常用命令以及搭建maven私人仓库
    素 数 (第三届省赛)
    房间安排(第三届省赛)
  • 原文地址:https://www.cnblogs.com/show58/p/12353718.html
Copyright © 2020-2023  润新知