朋也的博客 » 首页 » 文章
作者:朋也
日期:2016-08-25
类别:golang学习笔记
版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)
beego官网 beego作为一个golang的web框架,入门非常的简单,既然要开发网站就少不了视图模板
官方文档:http://beego.me/docs/mvc/view/tutorial.md
假如后台输出了一个字符串PageTitle
//登录页
func (c *IndexController) LoginPage() {
c.Data["PageTitle"] = "登录"
c.Layout = "layout/layout.tpl"
c.TplName = "login.tpl"
}
在模板里取值方法:
{{.PageTitle}}
前面要带上 . 很奇怪的取值方式,具体啥原因,我也不知道,会用就好 :)
一个网站肯定会共用 头,尾 部分,所以模板支持布局是很重要的,下面说说布局该怎么用
进入登录页面的路由
//登录页
func (c *IndexController) LoginPage() {
c.Data["PageTitle"] = "登录"
c.Layout = "layout/layout.tpl"
c.TplName = "login.tpl"
}
路由里设置了 c.Layout = "layout/layout.tpl"
然后设置了模板名称 c.TplName = "login.tpl"
下面就是在views文件夹里创建layout文件夹,并创建layout.tpl文件
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>{{.PageTitle}}</title>
<link rel="stylesheet" href="/static/bootstrap/css/bootstrap.min.css"/>
<link rel="stylesheet" href="/static/css/pybbs.css">
<script src="//cdn.bootcss.com/jquery/2.2.2/jquery.min.js"></script>
<script src="//cdn.bootcss.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
</head>
<body>
<div class="container">
{{.LayoutContent}}
</div>
</body>
</html>
然后在views文件夹里创建login.tpl文件
<div class="row">
<div class="col-md-6">
<div class="panel panel-default">
<div class="panel-heading">登录</div>
<div class="panel-body">
{{template "components/flash_error.tpl" .}}
<form action="/login" method="post">
<div class="form-group">
<label for="username">用户名</label>
<input type="text" id="username" name="username" class="form-control" placeholder="用户名">
</div>
<div class="form-group">
<label for="password">密码</label>
<input type="password" id="password" name="password" class="form-control" placeholder="密码">
</div>
<input type="submit" class="btn btn-default" value="登录"> <a href="/register">去注册</a>
</form>
</div>
</div>
</div>
</div>
注意:layout.tpl里的LayoutContent
是固定写法,目的是将tplName设置的页面渲染的位置
在开发网站的时候,有时候会出现几个页面的某一部分都是一样的,这时候可以将其提取出来,然后使用模板函数 template
引入要使用的模板,如果需要传值的话,只需要在末尾加上 .
就可以了
比如,我在views文件夹里创建文件夹components,然后新建welcome.tpl文件
<div class="panel panel-default">
<div class="panel-body">
<h5>更好用的GO语言的bbs</h5>
<p>在这里,您可以提问,回答,分享,诉说,这是个属于GO程序员的社区,欢迎您的加入!</p>
</div>
</div>
然后在首页页面里引入
{{template "components/welcome.tpl" .}}
效果
最后还是说说模板函数吧
用的最多的就是 if
range
if用法
<div class="col-md-3 hidden-sm hidden-xs">
{{if .IsLogin}}
{{template "components/user_info.tpl" .}}
{{template "components/topic_create.tpl" .}}
{{else}}
{{template "components/welcome.tpl" .}}
{{end}}
</div>
range (也就是for循环) 用法
<select name="sid" id="sid" class="form-control">
{{range .Sections}}
<option value="{{.Id}}">{{.Name}}</option>
{{end}}
</select>
对着官方文档来就可以成功,没有什么需要注意的,下面给个例子
package utils
import (
"time"
"github.com/xeonx/timeago"
"github.com/astaxie/beego"
)
func FormatTime(time time.Time) string {
return timeago.Chinese.Format(time)
}
func init() {
beego.AddFuncMap("timeago", FormatTime)
}
页面使用方法
<span>{{.InTime | timeago}}</span>