2.模板数据输出
最后更新于:2022-04-02 04:53:30
模板数据输出
1)静态模板数据输出
通过简单的指定beego.Controller.TplName模板文件,http response body将输出模板文件对应的内容。
模板目录
beego中默认的模板目录是views,用户可以把你的模板文件放到该目录下,beego会自动在该目录下的所有模板文件进行解析并缓存,开发模式下会每次重新解析,不做缓存。当然用户可以通过如下的方式改变模板的目录:
beego.ViewsPath = "/myviewpath"
自动渲染
beego中用户无需手动的调用渲染输出模板,beego会自动的在调用玩相应的method方法之后调用Render函数,当然如果你的应用是不需要模板输出的,那么你可以在配置文件或者在main.go中设置关闭自动渲染。
AutoRender 是否模板自动渲染,默认值为 true,对于 API 类型的应用,应用需要把该选项设置为 false,不需要渲染模板。
配置文件配置如下:
autorender = true
main.go文件中设置如下:
beego.AutoRender = true
模板名称
beego采用了Go语言内置的模板引擎,所有模板的语法和Go的一模一样,至于如何写模板文件,详细的请参考模板教程。
用户通过在Controller的对应方法中设置相应的模板名称,beego会自动的在viewpath目录下查询该文件并渲染,例如下面的设置,beego会在admin下面找add.tpl文件进行渲染:
this.TplName = "admin/user/index.tpl"
我们看到上面的模板后缀名是tpl,beego默认情况下支持tpl和html后缀名的模板文件,如果你的后缀名不是这两种,请进行如下设置:
beego.AddTemplateExt("你文件的后缀名")
当你设置了自动渲染,然后在你的Controller中没有设置任何的TplName,那么beego会自动设置你的模板文件如下:
c.TplNames = c.ChildName + "/" + c.Ctx.Request.Method + "." + c.TplExt
也就是你对应的Controller名字+请求方法名.模板后缀,也就是如果你的Controller名是AddController,请求方法是POST,默认的文件后缀是tpl,那么就会默认请求/viewpath/AddController/POST.tpl文件。
~~~
|-- admin
| |--controllers
| `-- user.go
~~~
~~~
package admin
import (
"github.com/astaxie/beego"
)
type UserController struct {
beego.Controller
}
func (this *UserController) Index() {
this.TplName = "admin/user/index.html"
}
~~~
~~~
|-- views
| |--admin
| |--user
| `-- index.html
~~~
~~~
Document
Document
this is view admin/user/index.html
int 数据模板渲染数据如下:{{.int}}
float 数据模板渲染数据如下:{{.float}}
string 数据模板渲染数据如下:{{.string}}
array 数据模板渲染数据如下:
{{range $key, $val := .array}} {{$key}} => {{$val}}
{{end}}
map 数据模板渲染数据如下:
{{range $key, $val := .map}} {{$key}} => {{$val}}
{{end}} {{.map.this}}=>{{.map.is}}
slice 数据模板渲染数据如下:
{{range $key, $val := .slice}} {{$key}} => {{$val}}
{{end}}
struct 数据模板渲染数据如下:
the username is {{.struct.Name}}
the age is {{.struct.Age}}
~~~ 浏览器访问: http://127.0.0.1:8080/admin/user/index 浏览器返回: ~~~ this is view admin/user/index.html int 数据模板渲染数据如下:123456 float 数据模板渲染数据如下:0.123456 string 数据模板渲染数据如下:this type is string array 数据模板渲染数据如下: 0 => 1 1 => 2 2 => 3 3 => 4 4 => 5 5 => 6 6 => 7 7 => 8 map 数据模板渲染数据如下: is => map this => type type=>map slice 数据模板渲染数据如下: 0 => s 1 => l 2 => i 3 => c 4 => e struct 数据模板渲染数据如下: the username is stu1 the age is 18 ~~~
';
this is view admin/user/index.html
~~~ 浏览器访问: http://127.0.0.1:8080/admin/user/index 浏览器输出: ~~~ this is view admin/user/index.html ~~~ 2)动态模板数据输出 在web中大部分的内容是静态的,只有少部分数据是动态的。为了复用模板的代码,需要能够把动态的数据插入到模板中,这需要特出的语法。 beego中模板通过{{}}包含需要被替换的字段,同时需要把要替换的内容添加到Controller的Data中,这样Controller执行时会自动匹配渲染模板。 模板标签 Go语言的默认模板采用了{{和}}作为左右标签,但是我们有时候在开发中可能界面是采用了AngularJS开发,他的模板也是这个标签,故而引起了冲突。在beego中你可以通过配置文件或者直接设置配置变量修改: ~~~ beego.TemplateLeft = "<<<" beego.TemplateRight = ">>>" ~~~ 模板数据 模板中的数据是通过在Controller中this.Data获取的,所以如果你想在模板中获取内容{{.Content}},那么你需要在Controller中如下设置: this.Data["Context"] = "value" 如何使用各种类型的数据渲染: ~~~ |-- admin | |--controllers | `-- user.go ~~~ ~~~ package admin import ( "github.com/astaxie/beego" ) type UserController struct { beego.Controller } func (this *UserController) Index() { // int控制器数据赋值 this.Data["int"] = 123456 // float控制器数据赋值 this.Data["float"] = 0.123456 // string控制器数据赋值 this.Data["string"] = "this type is string" // array控制器数据赋值 this.Data["array"] = [...]int{1, 2, 3, 4, 5, 6, 7, 8} // map控制器数据赋值 this.Data["map"] = map[string]string{"this": "type", "is": "map"} // slice控制器数据赋值 this.Data["slice"] = []string{"s", "l", "i", "c", "e"} // 结构体控制器数据赋值 type stu struct { Name string Age int } this.Data["struct"] = &stu{Name: "stu1", Age: 18} this.TplName = "admin/user/index.html" } ~~~ ~~~ |-- views | |--admin | |--user | `-- index.html ~~~ ~~~int 数据模板渲染数据如下:{{.int}}
float 数据模板渲染数据如下:{{.float}}
string 数据模板渲染数据如下:{{.string}}
array 数据模板渲染数据如下:
{{range $key, $val := .array}} {{$key}} => {{$val}}
{{end}}
map 数据模板渲染数据如下:
{{range $key, $val := .map}} {{$key}} => {{$val}}
{{end}} {{.map.this}}=>{{.map.is}}
slice 数据模板渲染数据如下:
{{range $key, $val := .slice}} {{$key}} => {{$val}}
{{end}}
struct 数据模板渲染数据如下:
the username is {{.struct.Name}}
the age is {{.struct.Age}}
~~~ 浏览器访问: http://127.0.0.1:8080/admin/user/index 浏览器返回: ~~~ this is view admin/user/index.html int 数据模板渲染数据如下:123456 float 数据模板渲染数据如下:0.123456 string 数据模板渲染数据如下:this type is string array 数据模板渲染数据如下: 0 => 1 1 => 2 2 => 3 3 => 4 4 => 5 5 => 6 6 => 7 7 => 8 map 数据模板渲染数据如下: is => map this => type type=>map slice 数据模板渲染数据如下: 0 => s 1 => l 2 => i 3 => c 4 => e struct 数据模板渲染数据如下: the username is stu1 the age is 18 ~~~