• 模板
    • 渲染上下文
    • 模板功能
      • eq
      • set
      • append
      • field
      • option
      • radio
      • nl2br
      • pluralize
      • raw
    • Including
    • 温馨提示
    • 自定义模板函数

    模板

    Revel 使用 Go 模板, 在下面两个目录中查找模板:

    • 应用程序的 views 目录 (包括所有的子目录)
    • Revel的 templates 目录.
      比如有一个控制器 Hello ,方法名为 World, Revel 会查找名字为 views/Hello/World.html的模板。模板名字不区分大小写,所以 views/hello/world.htmlviews/HeLlO/wOrLd.HtMl都是匹配的模板.

    Revel 提供了错误页面模板 (在开发模式中友好的显示编译错误), 开发者也可以重写这些模板,比如 app/views/errors/500.html.

    渲染上下文

    Revel 使用 RenderArgs map 渲染模板。除了开发者传送的数据, Revel 也提供一些有用的数据:

    • “errors” - 验证错误(map,请参考文档 Validation.ErrorMap
    • “flash” - 上个请求flash的数据

    模板功能

    Go 提供了一些 模板函数。Revel 也增加了一些模板函数。请阅读下面的文档 或 查看源代码.

    eq

    一个简单的 “a == b” 测试.

    例如:

    1. <div class="message {{if eq .User "you"}}you{{end}}">

    set

    在当前模板上下文中设置一个变量

    例如:

    1. {{set . "title" "Basic Chat room"}}
    2. <h1>{{.title}}</h1>

    append

    添加变量到一个数组中, 或者在模板上下文中创建一个数组

    例如:

    1. {{append . "moreScripts" "js/jquery-ui-1.7.2.custom.min.js"}}
    2. {{range .moreStyles}}
    3. <link rel="stylesheet" type="text/css" href="/public/{{.}}">
    4. {{end}}

    field

    input 字段辅助函数.

    给出一个字段名, 函数会生成包含下面成员的结构:

    • Id: 字段Id, 转换为一个HTML字段的ID。
    • Name: 字段名称
    • Value: 当前上下文中字段的值
    • Flash: 带回的字段值
    • Error: 字段错误消息(如果有错误)
    • ErrorClass: 原始的字符串 “hasError”, 如果没有错误就是一个 ””.
      浏览 godoc.

    例如:

    1. {{with $field := field "booking.CheckInDate" .}}
    2. <p class="{{$field.ErrorClass}}">
    3. <strong>Check In Date:</strong>
    4. <input type="text" size="10" name="{{$field.Name}}" class="datepicker" value="{{$field.Flash}}">
    5. * <span class="error">{{$field.Error}}</span>
    6. </p>
    7. {{end}}

    option

    使用辅助函数生成 HTML option 字段。

    例如:

    1. {{with $field := field "booking.Beds" .}}
    2. <select name="{{$field.Name}}">
    3. {{option $field "1" "One king-size bed"}}
    4. {{option $field "2" "Two double beds"}}
    5. {{option $field "3" "Three beds"}}
    6. </select>
    7. {{end}}

    radio

    使用辅助函数生成 HTML radio input 字段

    例如:

    1. {{with $field := field "booking.Smoking" .}}
    2. {{radio $field "true"}} Smoking
    3. {{radio $field "false"}} Non smoking
    4. {{end}}

    nl2br

    将换行符转换成 HTML 的 break.

    例如:

    1. You said:
    2. <div class="comment">{{nl2br .commentText}}</div>

    pluralize

    一个辅助的复数函数

    例如:

    1. There are {{.numComments}} comment{{pluralize (len comments) "" "s"}}

    raw

    输出原生的、未转义的文本

    例如:

    1. <div class="body">{{raw .blogBody}}</div>

    Including

    Go 模板允许你在模板中包含其他模板,比如:

    1. {{template "header.html" .}}

    注意: * 相对路径是 app/views

    温馨提示

    Revel 应用程序有效利用 Go 模板,请看看下面的例子:

    • revel/samples/booking/app/views/header.html
    • revel/samples/booking/app/views/Hotels/Book.html
      使用辅助函数,为模板设置标题和额外的样式。

    例如:

    1. <html>
    2. <head>
    3. <title>{{.title}}</title>
    4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    5. <link rel="stylesheet" type="text/css" media="screen" href="/public/css/main.css">
    6. <link rel="shortcut icon" type="image/png" href="/public/img/favicon.png">
    7. {{range .moreStyles}}
    8. <link rel="stylesheet" type="text/css" href="/public/{{.}}">
    9. {{end}}
    10. <script src="/public/js/jquery-1.3.2.min.js" type="text/javascript" charset="utf-8"></script>
    11. <script src="/public/js/sessvars.js" type="text/javascript" charset="utf-8"></script>
    12. {{range .moreScripts}}
    13. <script src="/public/{{.}}" type="text/javascript" charset="utf-8"></script>
    14. {{end}}
    15. </head>

    在模板中这样使用:

    1. {{set . title "Hotels"}}
    2. {{append . "moreStyles" "ui-lightness/jquery-ui-1.7.2.custom.css"}}
    3. {{append . "moreScripts" "js/jquery-ui-1.7.2.custom.min.js"}}
    4. {{template "header.html" .}}

    自定义模板函数

    应用程序可以注册自定义模板函数

    例如:

    1. func init() {
    2. revel.TemplateFuncs["eq"] = func(a, b interface{}) bool { return a == b }
    3. }