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
