请求处理流程

    Revel 首先会检查路由 conf/routes 文件:

    当 Revel 接收到一个 GET 请求到 / 的时候, Revel 会去执行App 控制器 Index 方法。

    让我们看看被调用的代码 app/controllers/app.go:

    1. import "github.com/revel/revel"
    2. type App struct {
    3. *revel.Controller
    4. }
    5. func (c App) Index() revel.Result {
    6. return c.Render()
    7. }

    控制器必须是在第一个位置嵌入 *revel.Controller 的结构体(直接或间接嵌入)。 控制器的方法如果是导出的并返回一个 revel.Result 可以被当做一个操作。

    Revel 控制器提供一些有用的方法来生成 Results。 这个例子中, 它调用 Render(), 查找和渲染一个模板、响应一个请求 (200 OK)。

    所有的模板都保存在 app/views 目录。如果没有指定模板, Revel 查找一个与控制器名字相同的模板。 这里, Revel 查找 app/views/App/Index.html 文件, 作为一个 。

    1. {{set . "title" "Home"}}
    2. {{template "header.html" .}}
    3. <header class="hero-unit" style="background-color:#A9F16C">
    4. <div class="container">
    5. <div class="row">
    6. <p></p>
    7. </div>
    8. </div>
    9. </div>
    10. </header>
    11. <div class="container">
    12. <div class="row">
    13. <div class="span6">
    14. {{template "flash.html" .}}
    15. </div>
    16. </div>
    17. </div>
    18. {{template "footer.html" .}}

    除了Go模板提供的功能外, Revel 添加了一些 有用的方法

    • 添加了 title 变量到上下文中。
    • 包含了 header.html 模板 (使用了 title 变量)。
    • 显示一个欢迎信息。
    • 包含了 flash.html 模板, 用来显示一些flash消息。
    • 包含了 footer.html 模板。
      header.html 模板中有一些模板标签:
    1. <!DOCTYPE html>
    2. <html>
    3. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    4. <link rel="stylesheet" type="text/css" media="screen" href="/public/stylesheets/main.css">
    5. <link rel="shortcut icon" type="image/png" href="/public/images/favicon.png">
    6. <script src="/public/javascripts/jquery-1.5.2.min.js" type="text/javascript" charset="utf-8"></script>
    7. {{range .moreStyles}}
    8. <link rel="stylesheet" type="text/css" href="/public/{{.}}">
    9. {{end}}
    10. {{range .moreScripts}}
    11. <script src="/public/{{.}}" type="text/javascript" charset="utf-8"></script>
    12. {{end}}
    13. </head>
    14. <body>

    可以看到标题被设置,从moreStyles和moreScripts变量中提取模板附加的JS和CSS文件。

    修改欢迎消息. 把 Index.html模板中的

    修改为

    1. <h1>Hello World</h1>

    刷新浏览器,立即看到欢迎消息变化了!Revel 会监视您的模板改动并重新加载它。

    Revel 会监视:

    • 所有 app/下的代码
    • 所有 app/views/下的模板
    • 路由文件: conf/routes
      如果发现代码有改动,Revel 会重新加载最新的代码. 现在来试一下: 打开 app/controllers/app.go 引入一个错误.

    将代码

    1. return c.Render()

    修改为

    1. return c.Renderx()

    最后,我们传送一些数据到模板中

    将代码 app/controllers/app.go:

    修改为:

    1. greeting := "Aloha World"
    2. return c.Render(greeting)

    将代码 app/views/App/Index.html:

    1. <h1>Hello World</h1>

    修改为:

      刷新页面,应该可以看到 Hawaiian greeting.

      下一篇: .