英文:
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")),
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论