为了账号安全,请及时绑定邮箱和手机立即绑定

在 Go 模板中请求上下文

在 Go 模板中请求上下文

Go
翻翻过去那场雪 2021-06-18 18:57:06
我想在 Go HTML 模板中编写这样一个条件片段:  {{if isUserAdmin}}      <a href"/admin/nuke">Go to the big red nuclear button</a>   {{end}}但是,这不是直接可能的,因为模板不知道触发其执行的请求,因此无法确定用户是否为管理员。有没有一些正常的方法来实现这一目标?我事先指出:我不想将管道用于此特定数据(请参阅有关此的其他问题)我承认只有处理程序/控制器应该处理逻辑,而视图应该只进行渲染。但是条件{{if isUserAdmin}}本身并不是逻辑,它是利用控制器已经计算出的布尔值的必要构造。该funcs中方法可以帮助,但目前不瘦够容易确定具体的方法isUserAdmin()
查看完整描述

3 回答

?
慕的地10843

TA贡献1785条经验 获得超8个赞

我同意 Darshan Computing,我认为从请求中传递信息的正确方法将在管道中。您可以将数据拆分为要呈现的数据和上下文,例如,如果您想清楚地将两者分开,可以让模板数据结构将它们都嵌入:


type TemplateData struct {

    *Content

    *Context

}

例如,这给出了这一点。然后,您可以根据共享的内容和特定于查询的内容重复使用某些上下文/内容信息。


查看完整回答
反对 回复 2021-06-28
?
繁花不似锦

TA贡献1851条经验 获得超4个赞

这是在模板编译之后但在每次执行之前使用Funcs覆盖的有效解决方案尝试(链接到 Playground)(感谢 Valentin CLEMENT 在其他问题中)。"isAdmin"

但它有几个缺陷:

  • "isAdmin"在模板编译之前声明一个虚拟的空函数是很奇怪的。

  • 多次使用 Funcs 很痛苦,因为我不能只覆盖一个方法,我必须提供一个包含所有功能的完整FuncMap) 编辑:实际上以前的 funcs 并没有丢失,我错了。

  • 它本质上不是线程安全的,并且会在多个 goroutine 更改并执行相同的模板时失败


查看完整回答
反对 回复 2021-06-28
  • 3 回答
  • 0 关注
  • 204 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信