Name Last Update
..
.gitignore Loading commit data...
.travis.yml Loading commit data...
LICENSE Loading commit data...
Makefile Loading commit data...
README.md Loading commit data...
dynamic.go Loading commit data...
go.mod Loading commit data...
go.sum Loading commit data...
multitemplate.go Loading commit data...
renderer.go Loading commit data...

README.md

Multitemplate

Build Status codecov Go Report Card GoDoc

This is a custom HTML render to support multi templates, ie. more than one *template.Template.

Usage

Start using it

Download and install it:

$ go get github.com/gin-contrib/multitemplate

Import it in your code:

import "github.com/gin-contrib/multitemplate"

Simple example

See example/simple/example.go

package main

import (
    "github.com/gin-contrib/multitemplate"
    "github.com/gin-gonic/gin"
)

func createMyRender() multitemplate.Renderer {
    r := multitemplate.NewRenderer()
    r.AddFromFiles("index", "templates/base.html", "templates/index.html")
    r.AddFromFiles("article", "templates/base.html", "templates/index.html", "templates/article.html")
    return r
}

func main() {
    router := gin.Default()
    router.HTMLRender = createMyRender()
    router.GET("/", func(c *gin.Context) {
        c.HTML(200, "index", gin.H{
            "title": "Html5 Template Engine",
        })
    })
    router.GET("/article", func(c *gin.Context) {
        c.HTML(200, "article", gin.H{
            "title": "Html5 Article Engine",
        })
    })
    router.Run(":8080")
}

Advanced example

Approximating html/template Inheritance

See example/advanced/example.go

package main

import (
    "path/filepath"

    "github.com/gin-contrib/multitemplate"
    "github.com/gin-gonic/gin"
)

func main() {
    router := gin.Default()
    router.HTMLRender = loadTemplates("./templates")
    router.GET("/", func(c *gin.Context) {
        c.HTML(200, "index.html", gin.H{
            "title": "Welcome!",
        })
    })
    router.GET("/article", func(c *gin.Context) {
        c.HTML(200, "article.html", gin.H{
            "title": "Html5 Article Engine",
        })
    })

    router.Run(":8080")
}

func loadTemplates(templatesDir string) multitemplate.Renderer {
    r := multitemplate.NewRenderer()

    layouts, err := filepath.Glob(templatesDir + "/layouts/*.html")
    if err != nil {
        panic(err.Error())
    }

    includes, err := filepath.Glob(templatesDir + "/includes/*.html")
    if err != nil {
        panic(err.Error())
    }

    // Generate our templates map from our layouts/ and includes/ directories
    for _, include := range includes {
        layoutCopy := make([]string, len(layouts))
        copy(layoutCopy, layouts)
        files := append(layoutCopy, include)
        r.AddFromFiles(filepath.Base(include), files...)
    }
    return r
}