Skip to content

Commit 65df2bd

Browse files
author
pzrr@qq.com
committed
Version 0.3.8
* 新增模板渲染支持,新增Renderer接口,需实现Render(io.Writer, string, interface{}, *HttpContext) error * 支持接入第三方模板引擎,默认使用http/template内建引擎 * HttpContext增加ViewData,用于向模板传递值 * HttpContext增加View()方法,传入模板文件名,用于简化模板使用:View(name string) error * 增加example\render * 2017-03-26 11:10
1 parent e461262 commit 65df2bd

3 files changed

Lines changed: 112 additions & 1 deletion

File tree

example/render/main.go

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
package main
2+
3+
import (
4+
"fmt"
5+
"github.com/devfeel/dotweb"
6+
"github.com/devfeel/dotweb/framework/file"
7+
"strconv"
8+
)
9+
10+
func main() {
11+
//初始化DotServer
12+
app := dotweb.New()
13+
14+
//设置dotserver日志目录
15+
app.SetLogPath(file.GetCurrentDirectory())
16+
17+
//设置Debug开关
18+
app.SetEnabledDebug(true)
19+
20+
//设置gzip开关
21+
//app.SetEnabledGzip(true)
22+
23+
//设置路由
24+
InitRoute(app.HttpServer)
25+
26+
//启动 监控服务
27+
//pprofport := 8081
28+
//go app.StartPProfServer(pprofport)
29+
30+
// 开始服务
31+
port := 8080
32+
fmt.Println("dotweb.StartServer => " + strconv.Itoa(port))
33+
err := app.StartServer(port)
34+
fmt.Println("dotweb.StartServer error => ", err)
35+
}
36+
37+
type UserInfo struct {
38+
UserName string
39+
Sex bool
40+
}
41+
42+
type BookInfo struct {
43+
Name string
44+
Size int64
45+
}
46+
47+
func TestView(ctx *dotweb.HttpContext) {
48+
ctx.ViewData().Set("data", "图书信息")
49+
ctx.ViewData().Set("user", &UserInfo{UserName: "user1", Sex: true})
50+
m := make([]*BookInfo, 5)
51+
m[0] = &BookInfo{Name: "book0", Size: 1}
52+
m[1] = &BookInfo{Name: "book1", Size: 10}
53+
m[2] = &BookInfo{Name: "book2", Size: 100}
54+
m[3] = &BookInfo{Name: "book3", Size: 1000}
55+
m[4] = &BookInfo{Name: "book4", Size: 10000}
56+
ctx.ViewData().Set("Books", m)
57+
58+
ctx.View("d:/gotmp/testview.html")
59+
}
60+
61+
func InitRoute(server *dotweb.HttpServer) {
62+
server.Router().GET("/", TestView)
63+
}

render.go

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package dotweb
2+
3+
import (
4+
"html/template"
5+
"io"
6+
"io/ioutil"
7+
"path/filepath"
8+
)
9+
10+
//Renderer is the interface that wraps the render method.
11+
type Renderer interface {
12+
Render(io.Writer, string, interface{}, *HttpContext) error
13+
}
14+
15+
type innerRenderer struct {
16+
}
17+
18+
// Render render view use http/template
19+
func (r *innerRenderer) Render(w io.Writer, tpl string, data interface{}, ctx *HttpContext) error {
20+
t, err := parseFile(tpl)
21+
if err != nil {
22+
return err
23+
}
24+
return t.Execute(w, data)
25+
}
26+
27+
// return http/template by gived file name
28+
func parseFile(filename string) (*template.Template, error) {
29+
var t *template.Template
30+
b, err := ioutil.ReadFile(filename)
31+
if err != nil {
32+
return nil, err
33+
}
34+
s := string(b)
35+
name := filepath.Base(filename)
36+
t = template.New(name)
37+
_, err = t.Parse(s)
38+
if err != nil {
39+
return nil, err
40+
}
41+
return t, nil
42+
}
43+
44+
// NewInnerRenderer create a inner renderer instance
45+
func NewInnerRenderer() *innerRenderer {
46+
r := new(innerRenderer)
47+
return r
48+
}

version.MD

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
#### Version 0.3.8
44
* 新增模板渲染支持,新增Renderer接口,需实现Render(io.Writer, string, interface{}, *HttpContext) error
5-
* 支持接入不同的模板引擎,默认使用http/template内建引擎
5+
* 支持接入第三方模板引擎,默认使用http/template内建引擎
66
* HttpContext增加ViewData,用于向模板传递值
77
* HttpContext增加View()方法,传入模板文件名,用于简化模板使用:View(name string) error
88
* 增加example\render

0 commit comments

Comments
 (0)