一、基本语法

go统一使用{{}}作为左右标签,没有其它的标签符号。

使用"."来访问当前位置的上下文,使用"$"来引用当前模板根级的上下文,使用$var来访问创建的变量。

1.模板中支持的go语言符号

{{"string"}} // 一般 string
{{`raw string`}} // 原始 string
{{'c'}} // byte
{{print nil}} // nil 也被支持

  

2.模板中的pipeline(管道)

可以是上下文的变量输出,也可以是函数通过管道传递的返回值。

{{. | FuncA | FuncB | FuncC}}

当pipeline的值等于:

  • false或0
  • nil的指针或interface
  • 长度为0的array、slice、map、string

那么这个pipeline被认为是空。

3.逻辑处理

(1)if...else...end

{{if pipeline}}{{end}}

if判断时,pipeline为空时,相当于判断为False

this.Data["IsLogin"] = true
this.Data["IsHome"] = true
this.Data["IsAbout"] = true

支持嵌套的循环

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

也可以使用else if进行

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

(2)range...end  内循环

{{range pipeline}}{{.}}{{end}}

pipeline 支持的类型为 array, slice, map, channel

range 循环内部的 . 改变为以上类型的子元素

对应的值长度为 0 时,range 不会执行,. 不会改变

pages := []struct {Num int
}{{10}, {20}, {30}}this.Data["Total"] = 100
this.Data["Pages"] = pages

使用 .Num 输出子元素的 Num 属性,使用 $. 引用模板中的根级上下文

{{range .Pages}}{{.Num}} of {{$.Total}}
{{end}}

使用创建的变量,在这里和 go 中的 range 用法是相同的。

{{range $index, $elem := .Pages}}{{$index}} - {{$elem.Num}} - {{.Num}} of {{$.Total}}
{{end}}

range 也支持 else

{{range .Pages}}
{{else}}{{/* 当 .Pages 为空 或者 长度为 0 时会执行这里 */}}
{{end}}

(3)with...end

{{with pipeline}}{{end}}

with 用于重定向 pipeline

{{with .Field.NestField.SubField}}{{.Var}}
{{end}}

也可以对变量赋值操作

{{with $value := "My name is %s"}}{{printf . "slene"}}
{{end}}

with 也支持 else

{{with pipeline}}
{{else}}{{/* 当 pipeline 为空时会执行这里 */}}
{{end}}

(4)define

define 可以用来定义自模板,可用于模块定义和模板嵌套

{{define "loop"}}<li>{{.Name}}</li>
{{end}}

使用 template 调用模板

<ul>{{range .Items}}{{template "loop" .}}{{end}}
</ul>

(5)template

{{template "模板名" pipeline}}

将对应的上下文 pipeline 传给模板,才可以在模板中调用

3.beego中支持直接载入文件模板

{{template "path/to/head.html" .}}

Beego 会依据你设置的模板路径读取 head.html

在模板中可以接着载入其他模板,对于模板的分模块处理很有用处

4.注释

允许多行文本注释,不允许嵌套

{{/* comment content
support new line */}}

  

二、基本函数

变量可以使用符号|在函数间传递

{{.Con | markdown | addlinks}}
{{.Name | printf "%s"}}  

使用括号

{{printf "nums is %s %d" (printf "%d %d" 1 2) 3}}

(1)and

{{and .X .Y .Z}}

and 会逐一判断每个参数,将返回第一个为空的参数,否则就返回最后一个非空参数

(2)call

{{call .Field.Func .Arg1 .Arg2}}

call 可以调用函数,并传入参数

调用的函数需要返回 1 个值 或者 2 个值,返回两个值时,第二个值用于返回 error 类型的错误。返回的错误不等于 nil 时,执行将终止。

(3)index

index 支持 map, slice, array, string,读取指定类型对应下标的值

this.Data["Maps"] = map[string]string{"name": "Beego"}
{{index .Maps "name"}}  

(4)len

{{printf "The content length is %d" (.Content|len)}}

返回对应类型的长度,支持类型:map, slice, array, string, chan

(5)not

not 返回输入参数的否定值,if true then false else true

(6)or

{{or .X .Y .Z}}

or 会逐一判断每个参数,将返回第一个非空的参数,否则就返回最后一个参数

(7)print

对应 fmt.Sprint

(8)printf

对应fmt.Sprintf

(9)pfintln

对应fmt.Sprintf

(10)urlquery

{{urlquery "http://beego.me"}}

将返回

http%3A%2F%2Fbeego.me

(11)eq / ne / lt / le / gt / ge

这类函数一般配合在 if 中使用

eq: arg1 == arg2
ne: arg1 != arg2
lt: arg1 < arg2
le: arg1 <= arg2
gt: arg1 > arg2
ge: arg1 >= arg2

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

arg1==arg2 || arg1==arg3 || arg1==arg4 ...

与 if 一起使用

{{if eq true .Var1 .Var2 .Var3}}{{end}}
{{if lt 100 200}}{{end}}

  

 

转载于:https://www.cnblogs.com/yangmingxianshen/p/10126311.html

beego——模板语法相关推荐

  1. beego模板语法循环html块,beego 模版语法

    beego 模板语法指南 本文讲述 beego 中使用的模板语法,与 go 模板语法基本相同. 基本语法 go 统一使用了 {{ 和 }} 作为左右标签,没有其他的标签符号.如果您想要修改为其它符号, ...

  2. beego模板语法循环html块,1.69 beego 模板语法指南 - Beego 中文文档

    本文讲述 beego 中使用的模板语法,与 go 模板语法基本相同. 基本语法 go 统一使用了 {{ 和 }} 作为左右标签,没有其他的标签符号.如果您想要修改为其它符号,可以参考 模板标签. 使用 ...

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

    Beego的前端几乎是另一种语言.一些循环.判断,不细看文档真的做不出来. 猫哥按:尽量在controller里把送出去的数据规整好了,尽量别再模板里处理,会省心很多的. 0. Beego的View模 ...

  4. Vue的模板语法学习

    模板语法 1.插值 a.文本 数据绑定最常见的形式就是使用 "Mustache" 语法(双大括号)的文本插值 我们在普通插值的时候无论何时,绑定的数据对象上 msg 属性发生了改变 ...

  5. Django 的模板语法之过滤器

    后端朝前端页面传递数据的方式# 第一种return render(request,'index.html',{'n':n})# 第二种return render(request,'index.html ...

  6. django之模板语法

    1. 变量 Django 模板中遍历复杂数据结构的关键是句点字符 句点符 views.py def index(request):'''模板语法:渲染变量 -> {{}}1. 深度查询,用的句点 ...

  7. angular2的模板语法

    Angular 应用管理着用户之所见和所为,并通过 Component 类的实例(组件)和面向用户的模板来与用户交互. 从使用模型-视图-控制器 (MVC) 或模型-视图-视图模型 (MVVM) 的经 ...

  8. Vue.js 模板语法

    模板语法 Vue.js 使用了基于 HTML 的模板语法,允许开发者声明式地将 DOM 绑定至底层 Vue 实例的数据.所有 Vue.js 的模板都是合法的 HTML ,所以能被遵循规范的浏览器和 H ...

  9. 4.Vue 模板语法

    Hello,我是 Alex 007,一个热爱计算机编程和硬件设计的小白,为啥是007呢?因为叫 Alex 的人太多了,再加上每天007的生活,Alex 007就诞生了. Vue模板语法 这篇文章我们来 ...

最新文章

  1. 学习XHTML的强烈欲望、!
  2. NetworkManager 冲突
  3. 九、序列参数集Sequence Paramater Set(SPS)解析
  4. 入门机器学习,看这些材料就够了
  5. win10系统安装Redis3.2.100
  6. 你可能不知道的switch
  7. .net excel循环插数据_Python实战: 如何将数据从一个Excel文件移动到另一个?
  8. 错误:readline/readline.h:没有那个文件或目录解决方法
  9. 黑大选修计算机模拟物理学,黑龙江大学学分制选课指南.doc
  10. bootstrap table 光标_第三章之Bootstrap 表格与按钮功能
  11. [myeclipse] 官方中文网站
  12. java 构造函数 和 构造代码块
  13. 医疗器械质量管理体系 - ISO 13485 简介
  14. 以Spring Boot的方式显示图片或下载文件到浏览器
  15. python一个类调用另一个类的方法_python – 从另一个类调用类方法
  16. 叶笑嘴角露出来一个不知是什么意味的笑容
  17. logparser使用_分析您的Web服务器数据并使用LogParser和Log Parser Lizard GUI进行授权
  18. 路由器:什么是软路由,看完本篇文章你就懂了
  19. IOS开发之延时执行的几种方法
  20. c语言 前置声明,C语言编程开发前置声明都有哪些作用

热门文章

  1. callbackcallback()到底有什么涵义?
  2. IDEA创建包含多个module的Maven工程
  3. Celery实现定时任务crontab
  4. Eclipse 各种小图标的含义
  5. 零基础入门深度学习(4) - 卷积神经网络
  6. 每天进步一点点《ML - 从极大似然到EM算法》
  7. 替换jar包_替换代码的情况下不停机!这操作可能工作6年的Java程序员都不会
  8. 浅析Python3中的bytes和str类型(转载)
  9. Word2010 给公式添加序号时公式变小解决方案
  10. 事件CEvent的使用