Add Pluggable View Renderer Example
Gin meets pongo2! (https://github.com/flosch/pongo2)
This commit is contained in:
		
							
								
								
									
										58
									
								
								examples/pluggable_renderer/example_pongo2.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								examples/pluggable_renderer/example_pongo2.go
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,58 @@
 | 
				
			|||||||
 | 
					package main
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"github.com/flosch/pongo2"
 | 
				
			||||||
 | 
						"github.com/gin-gonic/gin"
 | 
				
			||||||
 | 
						"net/http"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type pongoRender struct {
 | 
				
			||||||
 | 
						cache map[string]*pongo2.Template
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func newPongoRender() *pongoRender {
 | 
				
			||||||
 | 
						return &pongoRender{map[string]*pongo2.Template{}}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func writeHeader(w http.ResponseWriter, code int, contentType string) {
 | 
				
			||||||
 | 
						if code >= 0 {
 | 
				
			||||||
 | 
							w.Header().Set("Content-Type", contentType)
 | 
				
			||||||
 | 
							w.WriteHeader(code)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (p *pongoRender) Render(w http.ResponseWriter, code int, data ...interface{}) error {
 | 
				
			||||||
 | 
						file := data[0].(string)
 | 
				
			||||||
 | 
						ctx := data[1].(pongo2.Context)
 | 
				
			||||||
 | 
						var t *pongo2.Template
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if tmpl, ok := p.cache[file]; ok {
 | 
				
			||||||
 | 
							t = tmpl
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							tmpl, err := pongo2.FromFile(file)
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								return err
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							p.cache[file] = tmpl
 | 
				
			||||||
 | 
							t = tmpl
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						writeHeader(w, code, "text/html")
 | 
				
			||||||
 | 
						return t.ExecuteRW(w, ctx)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func main() {
 | 
				
			||||||
 | 
						r := gin.Default()
 | 
				
			||||||
 | 
						r.HTMLRender = newPongoRender()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						r.GET("/index", func(c *gin.Context) {
 | 
				
			||||||
 | 
							name := c.Request.FormValue("name")
 | 
				
			||||||
 | 
							ctx := pongo2.Context{
 | 
				
			||||||
 | 
								"title": "Gin meets pongo2 !",
 | 
				
			||||||
 | 
								"name":  name,
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							c.HTML(200, "index.html", ctx)
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Listen and server on 0.0.0.0:8080
 | 
				
			||||||
 | 
						r.Run(":8080")
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										12
									
								
								examples/pluggable_renderer/index.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								examples/pluggable_renderer/index.html
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,12 @@
 | 
				
			|||||||
 | 
					<!DOCTYPE html>
 | 
				
			||||||
 | 
					<html lang="ja">
 | 
				
			||||||
 | 
					  <head>
 | 
				
			||||||
 | 
					    <meta charset="utf-8">
 | 
				
			||||||
 | 
					    <title>{{ title }}</title>
 | 
				
			||||||
 | 
					    <meta name="keywords" content="">
 | 
				
			||||||
 | 
					    <meta name="description" content="">
 | 
				
			||||||
 | 
					  </head>
 | 
				
			||||||
 | 
					  <body>
 | 
				
			||||||
 | 
					    Hello {{ name }} ! 
 | 
				
			||||||
 | 
					  </body>
 | 
				
			||||||
 | 
					</html>
 | 
				
			||||||
		Reference in New Issue
	
	Block a user