在我去的代码,我经常用if
这样的
if user && user.Registered { }
Go模板中的等效代码将是
{{ if and .User .User.Registered }} {{ end }}
不幸的是在模板代码失败,如果.User
是nil
:/
在go模板中是否可以实现相同的目的?
模板and
功能不像Go 操作符那样进行短路评估&&
。
在调用and
函数之前先评估函数的参数。.User.Registered
即使.User
为nil ,也总是对表达式求值。
解决方法是使用嵌套if
:
{{if .User}}{{if .User.Registered}} {{end}}{{end}}
您可以避免嵌套if
或with
使用模板函数:
func isRegistered(u *user) bool {
return u != nil && u.Registered
}
const tmpl = `{{if isRegistered .User}}registered{{else}}not registered{{end}}`
t := template.Must(template.New("").Funcs(template.FuncMap{"isRegistered": isRegistered}).Parse(tmpl))
游乐场的例子
问题内容: 当我尝试使用和时,它注意到Go模板很奇怪。以下代码按预期工作: 但是,当我尝试将模板放在文件中时,它不起作用(说:): 使用template.html: 知道为什么吗?这是一个错误吗?有没有更简单的方法在模板中使用方法/功能? 问题答案: ParseFiles可能会使用更好的文档。一个模板对象可以包含多个模板,每个模板都有一个名称。如果查看ParseFiles的实现,则会看到它使用 文
问题内容: 使用我正在尝试在模板中使用自己的功能之一。不幸的是,我无法使用go模板的功能映射功能。我得到的只是以下错误: 简化的测试用例如下所示(): 我有以下简单模板(): 这是1.1.1。 问题答案: IIRC,必须在解析模板之前定义模板功能图。下面的代码似乎有效。
问题内容: 我知道在模板中我可以调用以表达式命名的函数,例如。但是如何为表达式命名函数呢? 问题答案: 您总是可以定义这样的功能:
主要模板文件与功能说明: DedeCMS系统的模板是非固定的,用户可以在新建栏目时可以自行选择栏目模板,官方仅提供最基本的默认模板,即是内置系统模型的各个模板,由于DedeCMS支持自定义频道模型,用户自定义新频道模型后,还需要按该模型的字段设计一套新的模板,此外,DedeCMS也支持使用风格的形式使用模板,默认风格是 default,它表示系统默认使用 {cmspath}/templets/de
问题内容: 因此,我正在做一个简单的if检查结构中的布尔变量,但似乎不起作用,只是停止呈现HTML。 所以下面的结构是这样的: 现在,我可以显示一个带有类别的Category结构。 贝娄是一个结构的例子: 我已经尝试了多种方法,如下所示,但是它们都不起作用: 问题答案: 您必须从模板导出要访问的所有字段:将其首字母更改为大写: 以及每个引用: 每个未导出的字段只能从声明包中访问。您的软件包声明类型
本文向大家介绍laravel 5 实现模板主题功能,包括了laravel 5 实现模板主题功能的使用技巧和注意事项,需要的朋友参考一下 众所周知,laravel渲染模板是通过View::make()实现的,需要显式指定模板文件路径: 既然这样,我们就可以自己实现模板主题功能,我们只需要将模板文件放到一个主题名称对应的目录里就行,比如默认主题为 default 的话,我们就这样写: 自定义主题 cu