- 前景
- 开发环境
- Go 基础
- 流程控制
- 函数
- 方法
- 面向对象
- 网络编程
- 并发编程
- 数据操作
- 常用标准库
- beego 框架
- gin 框架
- 微服务
- 插件库
- 项目
- 开源仓库
- go 学习线路图
- 音频和音乐
- 身份验证和 OAuth
- 机器人相关
- 标准 CLI
- 构建用户界面库
- 配置
- 持续集成
- CSS 预处理器
- 数据结构
- 数据库
- 数据库驱动
- 日期和时间
- 分布式系统
- 电子邮件
- 嵌入式脚本语言
- 错误处理
- 文件
- 金融
- Forms
- 功能性
- 游戏开发
- 生成与泛型
- 地理位置
- 编译器
- Goroutines
- 图形界面
- 图片
- 物联网
- 工作计划
- JSON格式
- Logging
- 机器学习
- 实现消息传递
- 微软办公软件
- 依赖注入
- 项目布局
- Strings
- 其他
- 自然语言处理
- 网络
- HTTP 客户端
- OpenGL
- ORM
- 包管理
- 性能
- 查询语言
- 资源嵌入
- 科学与数据分析
- 安全
- 序列化
- 服务器应用
- 流处理
- 模板引擎
- 测试
- 文字处理
- 第三方 API
- 实用工具
- UUID
- 验证方式
- 版本控制
- 视频
- Web 框架
- 中间件
- 路由器
- 视窗
- XML 格式
- 代码分析
- 编辑器插件
- 硬件
- go 生成工具
- go 工具
- DevOps 工具
- 其他
模板语法指南
本文讲述 beego 中使用的模板语法,与 go 模板语法基本相同。
2.1. 基本语法
go 统一使用了 {{
和 }}
作为左右标签,没有其他的标签符号。如果您想要修改为其它符号,可以参考 模板标签。
使用 .
来访问当前位置的上下文
使用 $
来引用当前模板根级的上下文
使用 $var
来访问创建的变量
[more]
模板中支持的 go 语言符号
{{"string"}} // 一般 string
{{`raw string`}} // 原始 string
{{'c'}} // byte
{{print nil}} // nil 也被支持
模板中的 pipeline
可以是上下文的变量输出,也可以是函数通过管道传递的返回值
{{. | FuncA | FuncB | FuncC}}
当 pipeline 的值等于:
- false 或 0
- nil 的指针或 interface
- 长度为 0 的 array, slice, map, string
那么这个 pipeline 被认为是空
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}}
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}}
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}}
define
define 可以用来定义自模板,可用于模块定义和模板嵌套
{{define "loop"}}
<li>{{.Name}}</li>
{{end}}
使用 template 调用模板
<ul>
{{range .Items}}
{{template "loop" .}}
{{end}}
</ul>
template
{{template "模板名" pipeline}}
将对应的上下文 pipeline 传给模板,才可以在模板中调用
Beego 中支持直接载入文件模板
{{template "path/to/head.html" .}}
Beego 会依据你设置的模板路径读取 head.html
在模板中可以接着载入其他模板,对于模板的分模块处理很有用处
注释
允许多行文本注释,不允许嵌套
{{/* comment content
support new line */}}
2.2. 基本函数
变量可以使用符号 |
在函数间传递
{{.Con | markdown | addlinks}}
{{.Name | printf "%s"}}
使用括号
{{printf "nums is %s %d" (printf "%d %d" 1 2) 3}}
and
{{and .X .Y .Z}}
and 会逐一判断每个参数,将返回第一个为空的参数,否则就返回最后一个非空参数
call
{{call .Field.Func .Arg1 .Arg2}}
call 可以调用函数,并传入参数
调用的函数需要返回 1 个值 或者 2 个值,返回两个值时,第二个值用于返回 error 类型的错误。返回的错误不等于 nil 时,执行将终止。
index
index 支持 map, slice, array, string,读取指定类型对应下标的值
this.Data["Maps"] = map[string]string{"name": "Beego"}
{{index .Maps "name"}}
len
{{printf "The content length is %d" (.Content|len)}}
返回对应类型的长度,支持类型:map, slice, array, string, chan
not
not 返回输入参数的否定值,if true then false else true
or
{{or .X .Y .Z}}
or 会逐一判断每个参数,将返回第一个非空的参数,否则就返回最后一个参数
对应 fmt.Sprint
printf
对应 fmt.Sprintf
println
对应 fmt.Sprintln
urlquery
{{urlquery "http://beego.me"}}
将返回
http%3A%2F%2Fbeego.me
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}}
更多文档请访问 beego 官网。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论