У меня возникли проблемы с загрузкой HTML-шаблонов с использованием фреймворка Gin через параметр r.HTMLRender
.
Казалось бы, шаблоны не находят.
Я пробовал использовать следующие помощники:
- GinHTMLRender: https://gist.github.com/madhums/4340cbeb36871e227905
- Шаблон EZ Gin: https://github.com/michelloworld/ez-gin-template
Ни один из них, похоже, не работает при установке пути по умолчанию для шаблонов (в моем случае app/views
); для того, чтобы заставить это работать, моя файловая структура шаблона html выглядит следующим образом:
/workspace
|-app
|-views
|-layouts
|-application.html
|-test.html
Вот пример кода загрузки Gin:
import (
"github.com/gin-contrib/location"
"github.com/gin-gonic/gin"
"fmt"
"os"
"github.com/gin-gonic/contrib/static"
"github.com/michelloworld/ez-gin-template"
)
//CORSMiddleware ...
func CORSMiddleware() gin.HandlerFunc {
/** CORS middleware **/
}
func Router() {
if os.Getenv("ENVIRONMENT") == "production" {
gin.SetMode(gin.ReleaseMode)
}
// Initialize Gin object
r := gin.Default()
// Cors Middleware
r.Use(CORSMiddleware())
// Rate limiting
rl, err := helpers.RateLimiterMiddleware()
if err != nil {
panic("Rate Limiting Initialization error")
}
r.Use(rl)
// Asset provision
r.Use(static.ServeRoot("/public","app/assets"))
// Get URL information
r.Use(location.Default())
// Attempt with EZ Template, fails
// I ge this error: "runtime error: invalid memory address or nil pointer dereference" when calling c.HTML(...)
render := eztemplate.New()
render.TemplatesDir = "app/views/" // default
render.Layout = "layouts/application" // default
render.Ext = ".html" // default
render.Debug = true // default
r.HTMLRender = render.Init()
// Attempt with GinHTMLRender, fails
// I get this error: https://gist.github.com/madhums/4340cbeb36871e227905#file-gin_html_render-go-L110
/*
htmlRender := GinHTMLRender.New()
htmlRender.TemplatesDir = "app/views/"
htmlRender.Debug = gin.IsDebugging()
htmlRender.Layout = "layouts/application"
log.Println("Dir:"+htmlRender.TemplatesDir)
r.HTMLRender = htmlRender.Create()*/
/** Some Routes **/
// Start web listener
r.Run(":8009") // listen and serve on 0.0.0.0:8080
}
Соответствующий вызов рендеринга представляет собой следующий код:
/* c is of type *gin.Context */
c.HTML(200, "test", "")
По какой-то причине кажется, что функция r.HTMLRender
не учитывает путь к шаблону; Я пытался сделать это:
_, err := template.ParseFiles("app/views/test.html")
if err != nil {
log.Println("Template Error")
} else {
log.Println("No Template Error")
}
В этом коде постоянно отображается сообщение «Нет ошибки шаблона», что наводит меня на мысль, что присвоение HTMLRender
не учитывает переменную набора TemplatesDir
.
Я какое-то время сталкивался с этой проблемой, и я не совсем уверен, как ее решить.
Любая помощь, чтобы заставить это работать, будет принята с благодарностью.
LoadHTMLGlob()
илиLoadHTMLFiles()
из gin-gonic / gin # html-rendering? ? - person assefamaru   schedule 27.11.2017