我想在 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
}
例如,这给出了这一点。然后,您可以根据共享的内容和特定于查询的内容重复使用某些上下文/内容信息。
繁花不似锦
TA贡献1851条经验 获得超4个赞
这是在模板编译之后但在每次执行之前使用Funcs覆盖的有效解决方案尝试(链接到 Playground)(感谢 Valentin CLEMENT 在其他问题中)。"isAdmin"
但它有几个缺陷:
"isAdmin"
在模板编译之前声明一个虚拟的空函数是很奇怪的。(多次使用 Funcs 很痛苦,因为我不能只覆盖一个方法,我必须提供一个包含所有功能的完整FuncMap) 编辑:实际上以前的 funcs 并没有丢失,我错了。
它本质上不是线程安全的,并且会在多个 goroutine 更改并执行相同的模板时失败
- 3 回答
- 0 关注
- 204 浏览
添加回答
举报
0/150
提交
取消