From edd55b55ced4814f09788972fdefee35f7462110 Mon Sep 17 00:00:00 2001 From: shenshouer Date: Sun, 2 Apr 2017 00:59:01 +0800 Subject: [PATCH] add custom Delims support --- gin.go | 20 ++++++++++++++------ render/html.go | 15 +++++++++++---- 2 files changed, 25 insertions(+), 10 deletions(-) diff --git a/gin.go b/gin.go index 60f4ab29..62f4472a 100644 --- a/gin.go +++ b/gin.go @@ -44,6 +44,7 @@ type ( // Create an instance of Engine, by using New() or Default() Engine struct { RouterGroup + delims render.Delims HTMLRender render.HTMLRender allNoRoute HandlersChain allNoMethod HandlersChain @@ -102,6 +103,7 @@ func New() *Engine { HandleMethodNotAllowed: false, ForwardedByClientIP: true, trees: make(methodTrees, 0, 9), + delims: render.Delims{"{{", "}}"}, } engine.RouterGroup.engine = engine engine.pool.New = func() interface{} { @@ -121,21 +123,27 @@ func (engine *Engine) allocateContext() *Context { return &Context{engine: engine} } +func (engine *Engine) Delims(left, right string) *Engine { + engine.delims = render.Delims{left, right} + return engine +} + func (engine *Engine) LoadHTMLGlob(pattern string) { if IsDebugging() { - debugPrintLoadTemplate(template.Must(template.ParseGlob(pattern))) - engine.HTMLRender = render.HTMLDebug{Glob: pattern} + // debugPrintLoadTemplate(template.Must(template.ParseGlob(pattern))) + debugPrintLoadTemplate(template.Must(template.New("").Delims(engine.delims.Left, engine.delims.Right).ParseGlob(pattern))) + engine.HTMLRender = render.HTMLDebug{Glob: pattern, Delims: engine.delims} } else { - templ := template.Must(template.ParseGlob(pattern)) + templ := template.Must(template.New("").Delims(engine.delims.Left, engine.delims.Right).ParseGlob(pattern)) engine.SetHTMLTemplate(templ) } } func (engine *Engine) LoadHTMLFiles(files ...string) { if IsDebugging() { - engine.HTMLRender = render.HTMLDebug{Files: files} + engine.HTMLRender = render.HTMLDebug{Files: files, Delims: engine.delims} } else { - templ := template.Must(template.ParseFiles(files...)) + templ := template.Must(template.New("").Delims(engine.delims.Left, engine.delims.Right).ParseFiles(files...)) engine.SetHTMLTemplate(templ) } } @@ -144,7 +152,7 @@ func (engine *Engine) SetHTMLTemplate(templ *template.Template) { if len(engine.trees) > 0 { debugPrintWARNINGSetHTMLTemplate() } - engine.HTMLRender = render.HTMLProduction{Template: templ} + engine.HTMLRender = render.HTMLProduction{Template: templ, Delims: engine.delims} } // NoRoute adds handlers for NoRoute. It return a 404 code by default. diff --git a/render/html.go b/render/html.go index 8bfb23ac..1dce46e0 100644 --- a/render/html.go +++ b/render/html.go @@ -10,17 +10,24 @@ import ( ) type ( + Delims struct { + Left string + Right string + } + HTMLRender interface { Instance(string, interface{}) Render } HTMLProduction struct { Template *template.Template + Delims Delims } HTMLDebug struct { - Files []string - Glob string + Files []string + Glob string + Delims Delims } HTML struct { @@ -49,10 +56,10 @@ func (r HTMLDebug) Instance(name string, data interface{}) Render { } func (r HTMLDebug) loadTemplate() *template.Template { if len(r.Files) > 0 { - return template.Must(template.ParseFiles(r.Files...)) + return template.Must(template.New("").Delims(r.Delims.Left, r.Delims.Right).ParseFiles(r.Files...)) } if len(r.Glob) > 0 { - return template.Must(template.ParseGlob(r.Glob)) + return template.Must(template.New("").Delims(r.Delims.Left, r.Delims.Right).ParseGlob(r.Glob)) } panic("the HTML debug render was created without files or glob pattern") }