pongo2 模板引擎

pongo2 是一个 Go 语言的模板引擎,其语法和 Django 的模板引擎语法类似,并且完全兼容 Django 模板。对于本来模板引擎就比较少的 Golang 来讲,其是一个不错的选择。

关于 pongo2 的使用,其项目官网上已有详细的介绍。

pongo2gin

由于笔者使用的是 Gin 作为 Web 框架,所以针对 Gin 开发了一个快速集成 pongo2 的中间组件 pongo2gin。如果恰好你也使用的是 Gin 作为开发框架,那只需要添加一行代码即可在你的项目中完美集成 pongo2gin。

安装: go get github.com/smartwalle/pongo2gin

使用示例:

import (
	"github.com/gin-gonic/gin"
	"github.com/smartwalle/pongo2gin"
)

var router = gin.Default()
// 将 Gin 的 HTMLRender 替换为 pongo2gin 的 Render,其它代码无需做任何改动。
// 当然在 template 目录下还得有一个 index.html 的文件。
router.HTMLRender = pongo2render.NewGinRender("./template")

router.GET("/m", func(c *gin.Context) {
	c.HTML(200, "index.html", map[string]interface{}{"title": "pongo2gin"})
})
router.Run(":9005")

pongo2martini

如果你使用的是 Martini,那可以使用 pongo2martini

安装: go get github.com/smartwalle/pongo2martini

使用示例:

import (
	"github.com/go-martini/martini"
	"github.com/smartwalle/pongo2martini"
)

var m = martini.Classic()
m.Use(pongo2render.NewMartinRender("./template", false))
m.Get("/", func(r pongo2render.MartinRender) {
	r.HTML("index.html", pongo2.Context{"title": "pongo2martini"})
})
m.RunOnAddr(":9005")

pongo2render

如果你没有使用任何框架,而是直接和 http.ResponseWriter 打交道,那推荐你使用pongo2render

安装:go get github.com/smartwalle/pongo2render

使用示例:

import (
	"net/http"
	"github.com/smartwalle/pongo2render"
)

var render = pongo2render.NewRender("./template")
http.HandleFunc("/m", func(w http.ResponseWriter, req *http.Request) {
	render.HTML(w, 200, "index.html", pongo2.Context{"title": "pongo2render"})
})
http.ListenAndServe(":9005", nil)

需要说明一点,pongo2gin 和 pongo2martini 都是基于 pongo2render,由于 pongo2render 只需要 http.ResponseWriter 对象即可正常使用,所以其基本上可以运用于任何 Web 框架。

下面我们将以 Gin 作为 Web 框架开始 pongo2 模板引擎之旅。

模板语法

虽然关于 pongo2 的资料比较少,但是别忘了它完全兼容 Django 模板的语法,Django 模板的学习资料就比较容易找到了,传送门-Django 的模板系统