Go Revel - Templates(模板)
revel使用Go官方的模板库。它会在两个目录查找模板文件:
1、应用的`views`目录以及它的所有子目录
2、revel库自己的`templates`目录
revel为错误页面提供了模板(在`dev`开发模式下,编译错误会更友好的显示),但是,如果用相同的名字创建一个模板,revel则会优先使用自己开发的模板。如 `app/views/errors/500.html`
##渲染内容
revel使用`RenderArgs`数据map来执行模板。除了从应用提供数据,revel也提供了:
1、“errors”, 从`Validation.ErrorMap`返回的错误信息
2、“flash”, 上一个请求携带的flash信息
##模板函数
Go本身为模板提供了一些函数方便我们使用。revel也添加了一些实用的函数:
**eq**
类似`a == b`的条件判断:
**set**
在当前作用域设置一个变量:
{{set . "title" "Basic Chat room"}}
{{.title}}
**append**
将一个给定的值添加至数组/切片,如果数组/切片不存在,则新建一个。
{{append . "moreScripts" "js/jquery-ui-1.7.2.custom.min.js"}}
{{range .moreStyles}}
{{end}}
**field**
对Input表单字段进行操作。
给定一个字段名称,它将返回一个包含下列成员的struct:
`Id`: 字段名,会转换为恰当的`HTML id`元素
`Name`: 字段名
`Value`: `RenderArgs`中当前字段的值
`Flash`: 当前字段的flash信息
`Error`: 任何一个与当前字段有关的错误信息
`ErrorClass`: `hasError`的原始信息,如果不存在则为空字符串
{{with $field := field "booking.CheckInDate" .}}
Check In Date:
* {{$field.Error}}
{{end}}
**option**
结合`field`模板函数生成`HTML option`元素
{{with $field := field "booking.Beds" .}}
{{option $field "1" "One king-size bed"}}
{{option $field "2" "Two double beds"}}
{{option $field "3" "Three beds"}}
{{end}}
**radio**
结合`field`模板函数生成`HTML radio`元素
{{with $field := field "booking.Smoking" .}}
{{radio $field "true"}} Smoking
{{radio $field "false"}} Non smoking
{{end}}
**nl2br**
生成HTML的换行标签
You said:
**pluralize**
转换单词的复数形式
There are {{.numComments}} comment{{pluralize (len comments) "" "s"}}
**Including**
Go允许将一个模板嵌入至另一个模板
{{template "header.html" .}}
有两点需要注意:
1、路径必须是`app/views`的相对路径
2、任何被嵌入的模板必须位于`app/views`目录的根位置(这个限制希望是暂时的)
**Tips**
revel的示例程序说明了如何有效的使用模板,请特别留意这两个示例:
*revel/samples/booking/app/views/header.html*
*revel/samples/booking/app/views/header.html*
它利用模板函数设置模板自己的html header和样式:
{{.title}}
{{range .moreStyles}}
{{end}}
{{range .moreScripts}}
{{end}}
引用html header模板:
{{set . title "Hotels"}}
{{append . "moreStyles" "ui-lightness/jquery-ui-1.7.2.custom.css"}}
{{append . "moreScripts" "js/jquery-ui-1.7.2.custom.min.js"}}
{{template "header.html" .}}
##自定义模板函数
revel应用可以注册自定义模板函数:
func init() {
revel.TemplateFuncs["eq"] = func(a, b interface{}) bool { return a == b }
}
Go Revel - Templates(模板)的更多相关文章
- Templates 模板:
Templates 模板: ########################温金 $template wj-flow01,"/data01/applog_backup/winfae_log/ ...
- python测试开发django-2.templates模板与html页
前言 Django 中的视图的概念是一类具有相同功能和模板的网页的集合.通俗一点来说,就是你平常打开浏览器,看到浏览器窗口展示出来的页面内容,那就是视图.前面一章通过浏览器访问http://127.0 ...
- django templates模板
Django templates模板 HTML代码可以被直接硬编码在views视图代码中,虽然这样很容易看出视图是怎么工作的,但直接将HTML硬编码到视图里却并不是一个好主意. 让我们来看一下为什么: ...
- python测试开发django-69.templates模板过滤器filter
前言 templates 模板里面过滤器 filter 的作用是对变量的出来,比如小写转大写,替换一些特殊字符,对列表取值,排序等操作. 内置的过滤器有很多,本篇拿几个常用的过滤器做案例讲解下相关的功 ...
- python测试开发django-67.templates模板变量取值
前言 django 的模板里面变量取值是通过句点语法来取值,就是一个点(.)符号.取值的对象也可以是字符串,int类型,list列表,字典键值对,也可以是一个类的实例对象. views视图 比如我在 ...
- Django web框架-----Django templates模板
说明:mytestsite是django框架下的项目,quicktool是mytestsite项目中的应用 一般的变量之类的用 {{ }}(变量),功能类的比如循环.条件判断是用 {% %}(标签) ...
- 11、Django实战第11天:templates模板继承
Django模板的继承,它首先定义一个整体的框架(父类),然后动态的部分(子类)只需要重写自己本身的代码就可以了. 1.在templates目录下创建base.html 2.把org-list.htm ...
- Ansible之templates模板
一.jinja2简介解 Jinja2是Python下一个被广泛应用的模版引擎,他的设计思想来源于Djanjo的模板引擎,并扩展了其语法和一系列强大的功能.ansible的模板配置文件就是用jinja2 ...
- Django之templates模板
模板渲染: 官方文档:https://docs.djangoproject.com/en/1.11/ref/templates/builtins/#std:templatetag-for 模板渲染两种 ...
随机推荐
- FIR基本型仿真_03
作者:桂. 时间:2018-02-05 20:50:54 链接:http://www.cnblogs.com/xingshansi/p/8419452.html 一.仿真思路 设计低通滤波器(5阶,6 ...
- cnetos7最小化安装ifconfig命令找不到怎么办
我们在安装完centos7最小化系统安装完成后,执行ifconfig命令会报命令未找到.实际上在centos7上,使用“ip addr”和“ip link”命令来查找网卡详情.ifconfig命令已经 ...
- 使用Spring4时, 运行时出现找不到MappingJacksonHttpMessageConverter的情况
启动项目报错: [org.springframework.web.context.ContextLoader]Context initialization failed org.springframe ...
- 学习排序算法(一):单文档方法 Pointwise
学习排序算法(一):单文档方法 Pointwise 1. 基本思想 这样的方法主要是将搜索结果的文档变为特征向量,然后将排序问题转化成了机器学习中的常规的分类问题,并且是个多类分类问题. 2. 方法流 ...
- virtualbox和vagrant卸载脚本在macbook
virtualbox和vagrant在macbook版本的安装文件内,都有一个卸载脚本uninstall.tool vagrant2.1.5卸载脚本: #!/usr/bin/env bash #--- ...
- android:ellipsize="end" 失效或者 相关的Bug
其实这文章有点傻逼. 相关的问题 TextView android:ellipsize=“end”超出一个字符时不显示…的解决 http://www.pocketdigi.com/20140122/1 ...
- Shiro系列(2) - 权限模型以及权限分配的两种方式
1. 顶级账户分配权限用户需要被分配相应的权限才可访问相应的资源.权限是对于资源的操作一张许可证.给用户分配资源权限需要将权限的相关信息保存到数据库.这些相关内容包含:用户信息.权限管理.用户分配的权 ...
- DDR3控制
很简单的,app_en和app_rdy一握手,代表MIG接受了一个写数据请求或者读数据请求,只要保证app_en和app_rdy握手,根本就不关心写数据rdy,这是MIG的一个bug,你看它源码就知道 ...
- nodepad++ 正则 替换
(?<k1>.*?)\=(?<k2>.*?); cookie.Add(new CookieList() { Key = "\1", Value = &quo ...
- 【Unity】2.11 了解游戏有哪些分类对你开阔思路有好处
分类:Unity.C#.VS2015 创建日期:2016-03-31 一.简介 对游戏类型的划分有助于游戏的市场定位,以便吸引具有同一爱好的玩家群体.此外,制作游戏策划方案时,也通常会依据不同的游戏类 ...