详细描述应该是 怎么定义公共的全局模板变量,比如全局的 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 }} 得到当前的时间戳
1
Carseason 2022-05-10 23:26:24 +08:00 via Android
ctx.Set()
|
3
Carseason 2022-05-11 00:39:16 +08:00 via Android
再用 ctx.HTML 写入到模板变量里
|
4
xcsoft 2022-05-11 00:46:42 +08:00
中间件中 通过 c.Set("test","testvalue") 设置参数
在 ``` go app.Get("/", func (c *gin.Context){ test := c.GetString("test") }) ``` 这样取出参数, |
5
dzdh OP |
6
Maboroshii 2022-05-11 02:17:14 +08:00 via Android
明天上班了告诉你 我好像做过这个
|
7
JohnH 2022-05-11 09:07:40 +08:00
[Golang Gin Middleware pass Data to Template]( https://stackoverflow.com/questions/71229454/golang-gin-middleware-pass-data-to-template)
google:gin template middleware |
9
llys 2022-05-20 15:50:49 +08:00
@Maboroshii 9 天过去了...
|
10
dzdh OP @llys 本来想实现 gin 的 render 接口自己实现个 render 把 ctx 里的内容拿出来,但是 gin.render 并没有在 render 阶段提供 ctx 。。
|
11
Maboroshii 2022-05-20 23:53:55 +08:00 via Android
@llys 喔我忘啦哈哈哈哈,明天有空看看
|
12
Maboroshii 2022-05-21 07:30:21 +08:00
我们用的 pongo2 模板, 可以在模板内使用全局信息
pongo2Render, _ := pongo2gin.NewRenderer("public/views") pongo2Render.TplSet.Globals = pongo2.Context{ "foo": "bar" } |
13
dzdh OP @Maboroshii 额。也是个招,压根儿就不用 gin 的模板。哈哈哈哈哈哈哈。
有个新问题,在并发请求中动态设置值会乱吗?详细咋用的呢? 比如 gin.Use(func() { other_tmpl.Context('x', user.id). 如果两个用户的并发请求怎么控制呢? |