在 Go 模板中请求上下文

我想在 Go HTML 模板中编写这样一个条件片段:

  {{if isUserAdmin}}
     <a href"/admin/nuke">Go to the big red nuclear button</a>
  {{end}}

但是,这不是直接可能的,因为模板不知道触发其执行的请求,因此无法确定用户是否为管理员。

有没有一些正常的方法来实现这一目标?

我事先指出:

  • 我不想将管道用于此特定数据(请参阅有关此的其他问题

  • 我承认只有处理程序/控制器应该处理逻辑,而视图应该只进行渲染。但是条件{{if isUserAdmin}}本身并不是逻辑,它是利用控制器已经计算出的布尔值的必要构造。

  • funcs中方法可以帮助,但目前不瘦够容易确定具体的方法isUserAdmin()


翻翻过去那场雪
浏览 205回答 3
3回答

慕的地10843

我同意 Darshan Computing,我认为从请求中传递信息的正确方法将在管道中。您可以将数据拆分为要呈现的数据和上下文,例如,如果您想清楚地将两者分开,可以让模板数据结构将它们都嵌入:type TemplateData struct {&nbsp; &nbsp; *Content&nbsp; &nbsp; *Context}例如,这给出了这一点。然后,您可以根据共享的内容和特定于查询的内容重复使用某些上下文/内容信息。

繁花不似锦

这是在模板编译之后但在每次执行之前使用Funcs覆盖的有效解决方案尝试(链接到 Playground)(感谢 Valentin CLEMENT 在其他问题中)。"isAdmin"但它有几个缺陷:"isAdmin"在模板编译之前声明一个虚拟的空函数是很奇怪的。(多次使用 Funcs 很痛苦,因为我不能只覆盖一个方法,我必须提供一个包含所有功能的完整FuncMap) 编辑:实际上以前的 funcs 并没有丢失,我错了。它本质上不是线程安全的,并且会在多个 goroutine 更改并执行相同的模板时失败
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go