当前位置: 首页 > 知识库问答 >
问题:

如何使用和/或在文本/模板中短路

陆耀
2023-03-14

我有这个Go模板:

{{ if and $b.Trigger $b.Trigger.Name }} 
  Name is {{ $b.Trigger.Name }}.
{{ else }}
  ...other stuff...
{{ end }}

我正在尝试使用此模板:

if b.Trigger != nil && $b.Trigger.Name != "" { ...

然而,它不起作用,因为正如text/templategodoc所说,对和/或函数的参数都进行了求值。

当<code>$b.Trigger时。名称被求值,因为$b而出错。触发器可以为零。因此它返回错误:

模板:构建.html:24:46:执行“内容”

我尝试将其重构为:

{{ if and (ne $b.Trigger nil) (ne $b.Trigger.Name "") }}

奇怪的是,这也失败了,它说我不能比较$b. Triger和nil,这没有意义,因为该字段是指针类型:

模板:生成.html:24:31:执行“内容”

有什么想法吗?


共有2个答案

何雅惠
2023-03-14

这里解释了为什么所有参数都在管道中求值。它是通过go模板函数求值的https://golang.org/pkg/text/template/#hdr-Functions

呼延运恒
2023-03-14

正如 Volker 上面提到的,嵌套 ifs:

{{if $b.Trigger}}{{if $b.Trigger.Name}}
  Name is {{ $b.Trigger.Name }}.
{{end}}{{end}}

或者,更简洁地说:

{{with $b.Trigger}}{{with .Name}}
  Name is {{.}}.
{{end}}{{end}}

不幸的是,上述内容不会处理 else 子句。这是一种(相当丑陋的)可能性:

{{$bTriggerName := ""}}
{{with $b.Trigger}}{{$bTriggerName = .Name}}{{end}}
{{with $bTriggerName}}
  Name is {{.}}.
{{else}}
  ...other stuff...
{{end}}

我想看看gobuffalo/毛绒是否可以更优雅地做到这一点,但截至2019年4月30日,它不能。

 类似资料:
  • 我有一个非常特殊的例子,我需要在一个模板文本中使用一个模板文本,但是我做不到。 代码如下所示: 然而,我必须将其包装在函数中,同时保持变量的值,这会导致错误发生。无论我是否逃脱了滴答声。 使用转义滴答,我收到以下错误消息: 错误:预期的某个链接但未提供 没有,我得到: 意外标记,预期“”,” 我该怎么处理这件事? 编辑:可能应该注意的是,中传递的代码将被渲染并且需要使用它。它最终将通过传递给另一个

  • 在 Adobe Illustrator 版本 CC 2015.3 及更早版本中创建文档... 注意:本文与 Adobe Illustrator CC 2015.3 及更早版本有关。从 CC 2017 版开始,Illustrator 提供了一种新的文档创建体验。现在,创建新文档时,您可以从多种模板和预设中进行选择,其中包括来自 Adobe Stock 的模板。有关详细信息,请参阅创建文档。 关于新文

  • 我过去使用过Grails渲染插件,在创建PDF时取得了很大成功。现在我想创建一个简单的文本文件,使用gsp。我喜欢使用模型轻松定义如何将信息插入模板。我意识到我不需要渲染文本文件,但是有没有类似的方法可以使用模板来创建普通的文本文件? 如何使用Grails渲染插件渲染jpg的示例:(注意模型的使用) 如果没有像上面例子那样简单的方法,因为我的信息来自多个域类,我应该只创建<代码>

  • 我正在做一个项目,我需要使用几个DateTime字段,我已经在我的模型中定义了,然后在模板中,我正在使用https://tempusdominus.github.io/bootstrap-4/插件,但是当我提交表单时,有两个问题来吧: 1) :Django说为所有DateTime字段输入有效的日期/时间(2):选择有效选项<代码>[“玉米油”]不是可用选项之一。 以下是我尝试过的: 从: 从: 从

  • 4.6. 文本和HTML模板 前面的例子,只是最简单的格式化,使用Printf是完全足够的。但是有时候会需要复杂的打印格式,这时候一般需要将格式化代码分离出来以便更安全地修改。这些功能是由text/template和html/template等模板包提供的,它们提供了一个将变量值填充到一个文本或HTML格式的模板的机制。 一个模板是一个字符串或一个文件,里面包含了一个或多个由双花括号包含的{{ac

  • 问题内容: Django在其模板中将其视为某些变量。我怎样才能逃避或或使得Django不把它当作变量。 应该打印完全一样。 问题答案: 我相信您正在寻找template标签。 如链接到文档所述, 由于模板系统没有“转义”的概念,因此要显示模板标签中使用的位之一,必须使用标签。 例如: 将显示为: