Golang Go语言中 Gin 如何让通过中间件设置的变量 在模板中能读取到
详细描述应该是 怎么定义公共的全局模板变量,比如全局的 webtitle 、seotitle 等
如
router := gin.Default()
router.use(func (ctx *gin.Context) {
// if user.isLogged()
// 怎么才能设置一个变量或值,让模板中可以读到
// endif
})
如 fiber 可以这样:
app.Use(func(ctx *fiber.Ctx) error {
_ = ctx.Bind(fiber.Map{
"t": time.Now().UnixNano(),
})
return ctx.Next()
})
app.Get("/", func(ctx *fiber.Ctx) error {
return ctx.Render(“tmpl_name”, fiber.Map{
})
})
// 模板中可以 {{ .t }} 得到当前的时间戳
Golang Go语言中 Gin 如何让通过中间件设置的变量 在模板中能读取到
更多关于Golang Go语言中 Gin 如何让通过中间件设置的变量 在模板中能读取到的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
ctx.Set()
更多关于Golang Go语言中 Gin 如何让通过中间件设置的变量 在模板中能读取到的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
ctx.Set(“test”,“test_value”)
// x.html
{{.test}}
并没有值
再用 ctx.HTML 写入到模板变量里
中间件中 通过 c.Set(“test”,“testvalue”) 设置参数
在go<br>app.Get("/", func (c *gin.Context){<br> test := c.GetString("test")<br><br>})<br>
这样取出参数,
这要是有几十上百个路由 ,写几十上百次的 gin.H{XX:ctx.Get(“XX”) ??
- -
明天上班了告诉你 我好像做过这个
[Golang Gin Middleware pass Data to Template]( https://stackoverflow.com/questions/71229454/golang-gin-middleware-pass-data-to-template)
google:gin template middleware
9 天过去了…
本来想实现 gin 的 render 接口自己实现个 render 把 ctx 里的内容拿出来,但是 gin.render 并没有在 render 阶段提供 ctx 。。
喔我忘啦哈哈哈哈,明天有空看看
额。也是个招,压根儿就不用 gin 的模板。哈哈哈哈哈哈哈。
有个新问题,在并发请求中动态设置值会乱吗?详细咋用的呢?
比如 gin.Use(func() { other_tmpl.Context(‘x’, user.id). 如果两个用户的并发请求怎么控制呢?
在Go语言的Gin框架中,如果你想通过中间件设置的变量在模板中读取到,可以通过Gin的上下文(context)来实现。Gin的上下文在请求的生命周期内传递,你可以在其中存储和访问数据。以下是一个简单的示例,展示了如何实现这一功能:
- 定义中间件:在中间件中,你可以将变量存储到Gin的上下文中。
func myMiddleware(c *gin.Context) {
// 设置变量到上下文中
c.Set("myVar", "Hello, Template!")
c.Next()
}
- 注册中间件:在路由中使用这个中间件。
r := gin.Default()
r.Use(myMiddleware)
-
在模板中读取变量:在Gin的模板中,你可以通过
html/template
的自定义函数或者通过模板引擎的上下文访问功能来读取这些变量。但Gin更常见的是将上下文数据传递给模板时,通过c.HTML
方法的第二个参数(一个map[string]interface{}
)来传递。你可以在处理函数中这样做:
func handler(c *gin.Context) {
myVar := c.Get("myVar")
c.HTML(http.StatusOK, "index.tmpl", gin.H{
"myVar": myVar,
})
}
- 在模板中使用变量:
<!DOCTYPE html>
<html>
<head>
<title>My Page</title>
</head>
<body>
<p>{{.myVar}}</p>
</body>
</html>
这样,你就可以在模板中读取到通过中间件设置的变量了。