1

我尝试使用text/templateGo 包渲染降价列表,如果值为空,则需要省略列表项。

例如:

完整列表渲染结果:

# Debug Template 1

- Item A: Apple
- Item B: Bosch
- Item C: Cocola
- Item D: Delta
- Item E: Ellie

B 和 D 为空时的预期结果:

# Debug Template 1

- Item A: Apple
- Item C: Cocola
- Item E: Ellie

所以基于我的完整模板:

# Debug Template 1

- Item A: {{ .ItemA }}
- Item B: {{ .ItemB }}
- Item C: {{ .ItemC }}
- Item D: {{ .ItemD }}
- Item E: {{ .ItemE }}

我尝试使用{{- ...}}语法来避免换行符,但是它修剪太多,并且之前的换行符{{- if ...}}也被修剪了。

即对于模板(故意两个换行符来演示这个):

# Debug Template 2


{{- if .ItemA }}- Item A: {{ .ItemA }}
{{ end }}
{{- if .ItemB }}- Item B: {{ .ItemB }}
{{ end }}
{{- if .ItemC }}- Item C: {{ .ItemC }}
{{ end }}
{{- if .ItemD }}- Item D: {{ .ItemD }}
{{ end }}
{{- if .ItemE }}- Item E: {{ .ItemE }}
{{ end }}

结果:

# Debug Template 2- Item A: Apple
- Item B: Bosch
- Item C: Cocola
- Item D: Delta
- Item E: Ellie

这是代码片段:

package main

import (
    "os"
    "text/template"
)

func DemoRenderIssue() error {
    data := struct {
        ItemA string
        ItemB string
        ItemC string
        ItemD string
        ItemE string
    }{
        ItemA: "Apple",
        // ItemB: "Bosch",
        ItemC: "Cocola",
        // ItemD: "Delta",
        ItemE: "Ellie",
    }
    tmplStr := `
# Debug Template 1

- Item A: {{ .ItemA }}
- Item B: {{ .ItemB }}
- Item C: {{ .ItemC }}
- Item D: {{ .ItemD }}
- Item E: {{ .ItemE }}

# Debug Template 2


{{- if .ItemA }}- Item A: {{ .ItemA }}
{{ end }}
{{- if .ItemB }}- Item B: {{ .ItemB }}
{{ end }}
{{- if .ItemC }}- Item C: {{ .ItemC }}
{{ end }}
{{- if .ItemD }}- Item D: {{ .ItemD }}
{{ end }}
{{- if .ItemE }}- Item E: {{ .ItemE }}
{{ end }}
`
    tmpl, err := template.New("demo").Parse(tmplStr)
    if err != nil {
        return err
    }
    return tmpl.Execute(os.Stdout, &data)
}

你能告诉我如何修复模板或其他技能以获得预期的结果吗?

4

1 回答 1

2

只要确保保留第一个换行符:

# Debug Template 2

{{ if .ItemA }}- Item A: {{ .ItemA }}
{{ end }}
...

正如文档所述,{{-将清除所有前面的空格。在您的情况下, using{{- if .ItemA...将清除字符串末尾的所有空格Template 2(换行符是空格)。只需将列表中的第一项保留为{{if .ItemA}}保留该点之前的所有空格。

于 2021-09-30T04:42:31.390 回答