【发布时间】:2023-01-03 16:18:42
【问题描述】:
给定以下模板:
{{ range $item := . }}
{{ if $item.IsA}}
Ok
{{ else }}
Fine
{{ end }}
{{ end }}
Done!
当我使用以下方式渲染它时:
t := template.New("test").Parse(_types)
text, err := t.Execute(&buffer, strct)
输出类似于:
!empty line
!empty line
Ok
!empty line
!empty line
Done!
这意味着如果我想正确地格式化文本,我必须将它重写为
{{ range $item := .}}{{ if $item.IsA }}OK{{ else }}{{ end }}{{ end }}
Done!
然后我得到类似的东西:
Ok
Done!
这是所需的输出。
以第二种方式编写模板非常难读且混乱。有什么方法可以让我们用适当的缩进编写模板,但以某种方式配置渲染,使模板占位符不会转换为新行,或者它们的缩进将被忽略(以便生成所需的输出)?
编辑:使用{- ""} 甚至会使整个事情变得更糟!为什么?请考虑以下事项:
{{- range $item := . }}
{{- if $item.IsA }}
{{- "How many spaces??" -}}OK
...
那么让我换一种说法,golang 中是否有任何内置的后处理器可用于模板?
【问题讨论】:
-
使用
{{-和`-}}`来控制空格。阅读模板包文档。 -
@BurakSerdar:这甚至使标记变得更糟,更难以阅读!
-
@BurakSerdar:我认为你没有正确理解我的问题。
-
使用相同的模板缩进,但使用
-}}并查看结果。 -
@BurakSerdar:你是认真的吗?你明白我正在努力让模板更
readable和干净吗?或者你想成为聪明的布拉克?
标签: go go-templates