From 4c20e9de09ef71079eb1a45b31f6aec0cb2b9192 Mon Sep 17 00:00:00 2001 From: SCys Date: Mon, 9 Nov 2015 00:41:31 +0800 Subject: [PATCH] + add custom render test(TODO) + add custom render in readme.md --- README.md | 80 +++++++++++++++++++++++++++++++++++++++++++ render/render_test.go | 4 +++ 2 files changed, 84 insertions(+) diff --git a/README.md b/README.md index e83952d6..3b9101da 100644 --- a/README.md +++ b/README.md @@ -459,6 +459,86 @@ func main() { ``` +#### Custom rendering + +Custom your template engine use SetCustomRenderFunc() + +```go +package main + +import ( + "github.com/flosch/pongo2" + "github.com/gin-gonic/gin" + "net/http" + "errors" +) + +func CustomRenderFunc(w http.ResponseWriter, name string, obj interface{}) error { + var err error + tpl, err := pongo2.FromFile(name) + if err != nil { + return err + } + + if obj == nil { + err = tpl.ExecuteWriter(nil, w) + } else { + + if data,ok := obj.(gin.H); ok { + err = tpl.ExecuteWriter(pongo2.Context(data), w) + } else if data,ok := obj.(pongo2.Context); ok { + err = tpl.ExecuteWriter(data, w) + } else { + return errors.New("invalid obj type") + } + } + + return err +} + +func main() { + router := gin.Default() + + pongo2.DefaultLoader.SetBaseDir("templates") + router.SetCustomRenderFunc(CustomRenderFunc) + + router.GET("/", func(c *gin.Context) { + c.CustomRender(200, "index.html", nil) + }) + + router.GET("/msg1", func(c *gin.Context) { + c.CustomRender(200, "message.html", pongo2.Context{ + "message": c.Query("name"), + }) + }) + + router.GET("/msg2", func(c *gin.Context) { + c.CustomRender(200, "message.html", gin.H{ + "message": c.Query("name"), + }) + }) + + router.Run("[::]:8888") +} +``` + +templates/index.html +```html +

+ hi +

+ +``` + +templates/message.html +```html +

+ hi {{ message }} +

+ +``` + + #### Redirects Issuing a HTTP redirect is easy: diff --git a/render/render_test.go b/render/render_test.go index 7a6ffb7d..519895b9 100644 --- a/render/render_test.go +++ b/render/render_test.go @@ -128,3 +128,7 @@ func TestRenderHTMLTemplate(t *testing.T) { assert.Equal(t, w.Body.String(), "Hello alexandernyquist") assert.Equal(t, w.Header().Get("Content-Type"), "text/html; charset=utf-8") } + +func TestRenderCustom(t *testing.T) { + // TODO +} \ No newline at end of file