Skip to content
This repository was archived by the owner on Apr 15, 2019. It is now read-only.

Latest commit

History

52 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

gin-template

GoDoc

Golang template for gin framework!

Deprecated!!!

Please consider trying to migrate to Goview

Goview

Goview is a lightweight, simple and easy template library based on golang html/template for building Go web application. Please consider trying to migrate to Goview.

Feature

  • Easy and simple to use for gin framework.
  • Use golang html/template syntax.
  • Support configure master layout file.
  • Support configure template file extension.
  • Support configure templates directory.
  • Support configure cache template.
  • Support include file.
  • Support dynamic reload template(disable cache mode).
  • Support multiple templates for fontend and backend.
  • Support go.rice add all resource files to a executable.

Docs

See https://www.godoc.org/github.com/foolin/gin-template

Install

go get github.com/foolin/gin-template

Usage

package main
import (
"github.com/gin-gonic/gin""github.com/foolin/gin-template""net/http"
)
funcmain() {
router:=gin.Default()
//new template enginerouter.HTMLRender=gintemplate.Default()
router.GET("/page", func(ctx*gin.Context) {
ctx.HTML(http.StatusOK, "page.html", gin.H{"title": "Page file title!!"})
})
router.Run(":9090")
}

Configure

TemplateConfig{
Root: "views", //template root pathExtension: ".tpl", //file extensionMaster: "layouts/master", //master layout filePartials: []string{"partials/head"}, //partial filesFuncs: template.FuncMap{
"sub": func(a, bint) int {
returna-b
},
// more funcs
},
DisableCache: false, //if disable cache, auto reload template file for debug.
}

Render

Render with master

The ctx is instance of *gin.Context

//use name without extension `.html`ctx.HTML(http.StatusOK, "index", gin.H{})

Render only file(not use master layout)

//use full name with extension `.html`ctx.HTML(http.StatusOK, "page.html", gin.H{})

Include syntax

//template file
{{include"layouts/footer"}}

Examples

Basic example

package main
import (
"github.com/gin-gonic/gin""github.com/foolin/gin-template""net/http"
)
funcmain() {
router:=gin.Default()
//new template enginerouter.HTMLRender=gintemplate.Default()
router.GET("/", func(ctx*gin.Context) {
//render with masterctx.HTML(http.StatusOK, "index", gin.H{
"title": "Index title!",
"add": func(aint, bint) int {
returna+b
},
})
})
router.GET("/page", func(ctx*gin.Context) {
//render only file, must full name with extensionctx.HTML(http.StatusOK, "page.html", gin.H{"title": "Page file title!!"})
})
router.Run(":9090")
}

Project structure:

|--app/views/|---index.html|---page.html|--layouts/|---footer.html|---master.htmlSeein"examples/basic"folder

Basic example

Advance example

package main
import (
"github.com/gin-gonic/gin""github.com/foolin/gin-template""net/http""html/template""time"
)
funcmain() {
router:=gin.Default()
//new template enginerouter.HTMLRender=gintemplate.New(gintemplate.TemplateConfig{
Root: "views",
Extension: ".tpl",
Master: "layouts/master",
Partials: []string{"partials/ad"},
Funcs: template.FuncMap{
"sub": func(a, bint) int {
returna-b
},
"copy": func() string{
returntime.Now().Format("2006")
},
},
DisableCache: true,
})
router.GET("/", func(ctx*gin.Context) {
//render with masterctx.HTML(http.StatusOK, "index", gin.H{
"title": "Index title!",
"add": func(aint, bint) int {
returna+b
},
})
})
router.GET("/page", func(ctx*gin.Context) {
//render only file, must full name with extensionctx.HTML(http.StatusOK, "page.tpl", gin.H{"title": "Page file title!!"})
})
router.Run(":9090")
}

Project structure:

|--app/views/|---index.tpl|---page.tpl|--layouts/|---footer.tpl|---head.tpl|---master.tpl|--partials/|---ad.tplSeein"examples/advance"folder

Advance example

Multiple example

package main
import (
"html/template""net/http""time""github.com/foolin/gin-template""github.com/gin-gonic/gin"
)
funcmain() {
router:=gin.Default()
//new template enginerouter.HTMLRender=gintemplate.New(gintemplate.TemplateConfig{
Root: "views/fontend",
Extension: ".html",
Master: "layouts/master",
Partials: []string{"partials/ad"},
Funcs: template.FuncMap{
"copy": func() string {
returntime.Now().Format("2006")
},
},
DisableCache: true,
})
router.GET("/", func(ctx*gin.Context) {
// `HTML()` is a helper func to deal with multiple TemplateEngine's.// It detects the suitable TemplateEngine for each path automatically.gintemplate.HTML(ctx, http.StatusOK, "index", gin.H{
"title": "Fontend title!",
})
})
//=========== Backend ===========////new middlewaremw:=gintemplate.NewMiddleware(gintemplate.TemplateConfig{
Root: "views/backend",
Extension: ".html",
Master: "layouts/master",
Partials: []string{},
Funcs: template.FuncMap{
"copy": func() string {
returntime.Now().Format("2006")
},
},
DisableCache: true,
})
// You should use helper func `Middleware()` to set the supplied// TemplateEngine and make `HTML()` work validly.backendGroup:=router.Group("/admin", mw)
backendGroup.GET("/", func(ctx*gin.Context) {
// With the middleware, `HTML()` can detect the valid TemplateEngine.gintemplate.HTML(ctx, http.StatusOK, "index", gin.H{
"title": "Backend title!",
})
})
router.Run(":9090")
}

Project structure:

|--app/views/|--fontend/|---index.html|--layouts/|---footer.html|---head.html|---master.html|--partials/|---ad.html|--backend/|---index.html|--layouts/|---footer.html|---head.html|---master.htmlSeein"examples/multiple"folder

Multiple example

Block example

/* * Copyright 2018 Foolin. All rights reserved. * * Use of this source code is governed by a MIT style * license that can be found in the LICENSE file. * */package main
import (
"net/http""github.com/gin-gonic/gin""github.com/foolin/gin-template"
)
funcmain() {
router:=gin.Default()
//new template enginerouter.HTMLRender=gintemplate.Default()
router.GET("/", func(ctx*gin.Context) {
ctx.HTML(http.StatusOK, "index", gin.H{
"title": "Index title!",
"add": func(aint, bint) int {
returna+b
},
})
})
router.GET("/block", func(ctx*gin.Context) {
ctx.HTML(http.StatusOK, "block", gin.H{"title": "Block file title!!"})
})
router.Run(":9090")
}

Project structure:

|--app/views/|---index.html|---block.html|--layouts/|---master.htmlSeein"examples/block"folder

Block example

go.rice example

/* * Copyright 2018 Foolin. All rights reserved. * * Use of this source code is governed by a MIT style * license that can be found in the LICENSE file. * */package main
import (
"net/http""github.com/GeertJohan/go.rice""github.com/foolin/gin-template/supports/gorice""github.com/gin-gonic/gin"
)
funcmain() {
router:=gin.Default()
// servers other static filesstaticBox:=rice.MustFindBox("static")
router.StaticFS("/static", staticBox.HTTPBox())
//new template enginerouter.HTMLRender=gorice.New(rice.MustFindBox("views"))
// Routesrouter.GET("/", func(c*gin.Context) {
//render with masterc.HTML(http.StatusOK, "index", gin.H{
"title": "Index title!",
"add": func(aint, bint) int {
returna+b
},
})
})
router.GET("/page", func(c*gin.Context) {
//render only file, must full name with extensionc.HTML(http.StatusOK, "page.html", gin.H{"title": "Page file title!!"})
})
// Start serverrouter.Run(":9090")
}

Project structure:

|--app/views/|---index.html|---page.html|--layouts/|---footer.html|---master.html|--app/static/|--css/|---bootstrap.css|--img/|---gopher.pngSeein"examples/gorice"folder

gorice example

Supports

Relative Template

About

golang template for gin framework!

Topics

Resources

Stars

124 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages