英文:
How can i change the Delim in echo Render?
问题
我正在尝试更改Go语言中HTML模板的分隔符。不幸的是,在render函数和main函数中都无法生效。
请参考https://pkg.go.dev/text/template#Template.Delims
package main
import (
	"html/template"
	"io"
	"net/http"
	"github.com/labstack/echo/v4"
	"github.com/labstack/echo/v4/middleware"
)
type Template struct {
	templates *template.Template
}
func (t *Template) Render(w io.Writer, name string, data interface{}, c echo.Context) error {
	t.templates.Delims("[[", "]]")
	return t.templates.ExecuteTemplate(w, name, data)
}
func Hello(c echo.Context) error {
	test := `{
		"name" : "Ben",
		"country" : "Germany",
		"city" : "Berlin",
		"body":{"test":"test","test2":"test2"}
	}`
	return c.Render(http.StatusOK, "hello", test)
}
func main() {
	// Echo实例
	e := echo.New()
	t := &Template{
		templates: template.Must(template.ParseGlob("public/views/*.html")),
	}
	t.templates.Delims("[[", "]]")
	e.Renderer = t
	e.GET("/hello", Hello)
	// 中间件
	e.Use(middleware.Logger())
	e.Use(middleware.Recover())
	// 启动服务器
	e.Logger.Fatal(e.Start(":8000"))
}
希望对你有帮助!
英文:
i am trying to change the delimiter for go in an html template. Unfortunately, it does not work in the render function, nor in the main function.
See https://pkg.go.dev/text/template#Template.Delims
package main
import (
	"html/template"
	"io"
	"net/http"
	"github.com/labstack/echo/v4"
	"github.com/labstack/echo/v4/middleware"
)
type Template struct {
	templates *template.Template
}
func (t *Template) Render(w io.Writer, name string, data interface{}, c echo.Context) error {
	t.templates.Delims("[[", "]]")
	return t.templates.ExecuteTemplate(w, name, data)
}
func Hello(c echo.Context) error {
	test := `{
        "name" : "Ben",
        "country" : "Germany",
        "city" : "Berlin",
		"body":{"test":"test","test2":"test2"}
    }`
	return c.Render(http.StatusOK, "hello", test)
}
func main() {
	// Echo instance
	e := echo.New()
	t := &Template{
		templates: template.Must(template.ParseGlob("public/views/*.html")),
	}
	t.templates.Delims("[[", "]]")
	e.Renderer = t
	e.GET("/hello", Hello)
	// Middleware
	e.Use(middleware.Logger())
	e.Use(middleware.Recover())
	// Start server
	e.Logger.Fatal(e.Start(":8000"))
}
答案1
得分: 1
你必须在调用ParseGlob之前调用Delims方法。
像这样:
	t := &Template{
		templates: template.Must(template.New("").Delims("[[", "]]").ParseGlob("public/views/*.html")),
	}
英文:
You must call Delims before ParseGlob.
like this:
	t := &Template{
		templates: template.Must(template.New("").Delims("[[", "]]").ParseGlob("public/views/*.html")),
	}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。


评论