Golang 语言 Web 框架 beego v2 之模板(下)

简介: Golang 语言 Web 框架 beego v2 之模板(下)

04

模板函数


基本函数


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


{{.Con | markdown | addlinks}}



{{.Name | printf "%s"}}


使用括号


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


and



{{and .X .Y .Z}}

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


or



{{or .X .Y .Z}}


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


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


print


对应 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 || arg1==arg3 || arg1==arg4 ...

与 if 一起使用


{{if eq true .Var1 .Var2 .Var3}}{{end}}



{{if lt 100 200}}{{end}}


内置模板函数


  • dateformat
    实现了时间的格式化,返回字符串,使用方法 {{dateformat .Time "2006-01-02T15:04:05Z07:00"}}。
  • date
    实现了类似 PHP 的 date 函数,可以很方便的根据字符串返回时间,使用方法 {{date .T "Y-m-d H:i:s"}}。
  • compare
    实现了比较两个对象的比较,如果相同返回 true,否者 false,使用方法 {{compare .A .B}}。
  • substr
    实现了字符串的截取,支持中文截取的完美截取,使用方法 {{substr .Str 0 30}}。
  • html2str
    实现了把 html 转化为字符串,剔除一些 script、css 之类的元素,返回纯文本信息,使用方法 {{html2str .Htmlinfo}}。
  • str2html
    实现了把相应的字符串当作 HTML 来输出,不转义,使用方法 {{str2html .Strhtml}}。
  • htmlquote
    实现了基本的 html 字符转义,使用方法 {{htmlquote .quote}}。
  • htmlunquote
    实现了基本的反转移字符,使用方法 {{htmlunquote .unquote}}。
  • renderform
    根据 StructTag 直接生成对应的表单,使用方法 {{&struct | renderform}}。
  • assets_js
    为 js 文件生成一个 <script> 标签. 使用方法 {{assets_js src}}
  • assets_css
    为 css 文件生成一个 <link> 标签. 使用方法 {{assets_css src}}
  • config
    获取 AppConfig 的值. 使用方法 {{config configType configKey defaultValue}}. 可选的 configType 有 String, Bool, Int, Int64, Float, DIY
  • map_get
    获取 map 的值
// In controller
Data["m"] = map[string]interface{} {
    "a": 1,
    "1": map[string]float64{
        "c": 4,
    },
}
// In view
{{ map_get .m "a" }} // return 1
{{ map_get .m 1 "c" }} // return 4
  • urlfor
    获取控制器方法的 URL
{{urlfor "TestController.List"}}


自定义模板函数


beego 支持用户定义模板函数,但是必须在 web.Run() 调用之前,设置如下:


func hello(in string)(out string){
    out = in + "world"
    return
}
web.AddFuncMap("hi",hello)


定义之后你就可以在模板中这样使用了:


{{.Content | hi}}


05

静态文件


Go 语言内部其实已经提供了 http.ServeFile,通过这个函数可以实现静态文件的服务。beego 针对这个功能进行了一层封装,通过下面的方式进行静态文件注册:


web.SetStaticPath("/static","public")


  • 第一个参数是路径,url 路径信息
  • 第二个参数是静态文件目录(相对应用所在的目录)


beego 支持多个目录的静态文件注册,用户可以注册如下的静态文件目录:


web.SetStaticPath("/images","images")
web.SetStaticPath("/css","css")
web.SetStaticPath("/js","js")


设置了如上的静态目录之后,用户访问 /images/login/login.png,那么就会访问应用对应的目录下面的 images/login/login.png 文件。如果是访问 /static/img/logo.png,那么就访问 public/img/logo.png文件。


默认情况下 beego 会判断目录下文件是否存在,不存在直接返回 404 页面,如果请求的是 index.html,那么由于 http.ServeFile 默认是会跳转的,不提供该页面的显示。

因此 beego 可以设置

web.BConfig.WebConfig.DirectoryIndex=true 这样来使得显示 index.html 页面。而且开启该功能之后,用户访问目录就会显示该目录下所有的文件列表。


06

分页


这里所说的分页,指的是大量数据显示时,每页显示固定的数量的数据,同时显示多个分页链接,用户点击翻页链接或页码时进入到对应的网页。分页算法中需要处理的问题:


  1. 当前数据一共有多少条。
  2. 每页多少条,算出总页数。
  3. 根据总页数情况,处理翻页链接。
  4. 对页面上传入的 Get 或 Post 数据,需要从翻页链接中继续向后传。
  5. 在页面显示时,根据每页数量和当前传入的页码,设置查询的 Limit 和 Skip,选择需要的数据。
  6. 其他的操作,就是在 View 中显示翻页链接和数据列表的问题了。


模板处理过程中经常需要分页,那么如何进行有效的开发和操作呢?我们开发组针对这个需求开发了如下的例子,希望对大家有用



07

总结


本文整理了 beego 关于模板的使用方法,文章内容来自 beego 官方手册,作者提供的仅是 beego 模板的学习路径,读者也可以直接阅读官方手册。





目录
相关文章
|
3月前
|
开发框架 前端开发 Go
【GoGin】(0)基于Go的WEB开发框架,GO Gin是什么?怎么启动?本文给你答案
Gin:Go语言编写的Web框架,以更好的性能实现类似Martini框架的APInet/http、Beego:开源的高性能Go语言Web框架、Iris:最快的Go语言Web框架,完备的MVC支持。
416 1
|
3月前
|
存储 安全 Java
【Golang】(4)Go里面的指针如何?函数与方法怎么不一样?带你了解Go不同于其他高级语言的语法
结构体可以存储一组不同类型的数据,是一种符合类型。Go抛弃了类与继承,同时也抛弃了构造方法,刻意弱化了面向对象的功能,Go并非是一个传统OOP的语言,但是Go依旧有着OOP的影子,通过结构体和方法也可以模拟出一个类。
244 1
|
7月前
|
开发框架 JSON 中间件
Go语言Web开发框架实践:路由、中间件、参数校验
Gin框架以其极简风格、强大路由管理、灵活中间件机制及参数绑定校验系统著称。本文详解其核心功能:1) 路由管理,支持分组与路径参数;2) 中间件机制,实现全局与局部控制;3) 参数绑定,涵盖多种来源;4) 结构体绑定与字段校验,确保数据合法性;5) 自定义校验器扩展功能;6) 统一错误处理提升用户体验。Gin以清晰模块化、流程可控及自动化校验等优势,成为开发者的优选工具。
|
7月前
|
开发框架 安全 前端开发
Go Web开发框架实践:模板渲染与静态资源服务
Gin 是一个功能强大的 Go Web 框架,不仅适用于构建 API 服务,还支持 HTML 模板渲染和静态资源托管。它可以帮助开发者快速搭建中小型网站,并提供灵活的模板语法、自定义函数、静态文件映射等功能,同时兼容 Go 的 html/template 引擎,具备高效且安全的页面渲染能力。
|
7月前
|
开发框架 JSON 中间件
Go语言Web开发框架实践:使用 Gin 快速构建 Web 服务
Gin 是一个高效、轻量级的 Go 语言 Web 框架,支持中间件机制,非常适合开发 RESTful API。本文从安装到进阶技巧全面解析 Gin 的使用:快速入门示例(Hello Gin)、定义 RESTful 用户服务(增删改查接口实现),以及推荐实践如参数校验、中间件和路由分组等。通过对比标准库 `net/http`,Gin 提供更简洁灵活的开发体验。此外,还推荐了 GORM、Viper、Zap 等配合使用的工具库,助力高效开发。
|
9月前
|
中间件 Go
Golang | Gin:net/http与Gin启动web服务的简单比较
总的来说,`net/http`和 `Gin`都是优秀的库,它们各有优缺点。你应该根据你的需求和经验来选择最适合你的工具。希望这个比较可以帮助你做出决策。
450 35
|
9月前
|
人工智能 自然语言处理 JavaScript
测试工程师要失业?Magnitude:开源AI Agent驱动的端到端测试框架,让Web测试更智能,自动完善测试用例!
Magnitude是一个基于视觉AI代理的开源端到端测试框架,通过自然语言构建测试用例,结合推理代理和视觉代理实现智能化的Web应用测试,支持本地运行和CI/CD集成。
1140 15
测试工程师要失业?Magnitude:开源AI Agent驱动的端到端测试框架,让Web测试更智能,自动完善测试用例!
|
11月前
|
人工智能 开发框架 数据可视化
Eino:字节跳动开源基于Golang的AI应用开发框架,组件化设计助力构建AI应用
Eino 是字节跳动开源的大模型应用开发框架,帮助开发者高效构建基于大模型的 AI 应用。支持组件化设计、流式处理和可视化开发工具。
1826 27
|
开发框架 搜索推荐 数据可视化
Django框架适合开发哪种类型的Web应用程序?
Django 框架凭借其强大的功能、稳定性和可扩展性,几乎可以适应各种类型的 Web 应用程序开发需求。无论是简单的网站还是复杂的企业级系统,Django 都能提供可靠的支持,帮助开发者快速构建高质量的应用。同时,其活跃的社区和丰富的资源也为开发者在项目实施过程中提供了有力的保障。
623 67
|
开发框架 JavaScript 前端开发
TypeScript 是一种静态类型的编程语言,它扩展了 JavaScript,为 Web 开发带来了强大的类型系统、组件化开发支持、与主流框架的无缝集成、大型项目管理能力和提升开发体验等多方面优势
TypeScript 是一种静态类型的编程语言,它扩展了 JavaScript,为 Web 开发带来了强大的类型系统、组件化开发支持、与主流框架的无缝集成、大型项目管理能力和提升开发体验等多方面优势。通过明确的类型定义,TypeScript 能够在编码阶段发现潜在错误,提高代码质量;支持组件的清晰定义与复用,增强代码的可维护性;与 React、Vue 等框架结合,提供更佳的开发体验;适用于大型项目,优化代码结构和性能。随着 Web 技术的发展,TypeScript 的应用前景广阔,将继续引领 Web 开发的新趋势。
370 2

推荐镜像

更多