简单如果不工作 go 模板
Simple if not working go template
所以我正在做一个简单的 if 检查来自结构的 bool 但它似乎不起作用,它只是停止渲染 HTML.
所以下面的结构是这样的:
type Category struct {
ImageURL string
Title string
Description string
isOrientRight bool
}
现在我有了该类别结构的一部分,我可以用一个范围来显示它。
下面是一个结构的例子:
juiceCategory := Category{
ImageURL: "lemon.png",
Title: "Juices and Mixes",
Description: `Explore our wide assortment of juices and mixes expected by
today's lemonade stand clientelle. Now featuring a full line of
organic juices that are guaranteed to be obtained from trees that
have never been treated with pesticides or artificial
fertilizers.`,
isOrientRight: true,
}
我尝试了多种方法,如下所示,但其中 none 有效:
{{range .Categories}}
{{if .isOrientRight}}
Hello
{{end}}
{{if eq .isOrientRight true}}
Hello
{{end}}
<!-- Print nothing -->
{{ printf .isOrientRight }}
{{end}}
您必须从模板中导出您想要访问的所有字段:将其首字母更改为大写 I
:
type Category struct {
ImageURL string
Title string
Description string
IsOrientRight bool
}
以及对它的每一次引用:
{{range .Categories}}
{{if .IsOrientRight}}
Hello
{{end}}
{{if eq .IsOrientRight true}}
Hello
{{end}}
<!-- Print nothing -->
{{ printf .IsOrientRight }}
{{end}}
每个未导出的字段只能从声明包中访问。您的包声明了 Category
类型,而 text/template
and html/template
是不同的包,因此如果您希望这些包能够访问它,则需要导出它。
Template.Execute()
returns 一个错误,如果你已经存储/检查它的 return 值,你会立即发现它,因为你会得到一个类似于这个:
template: :2:9: executing "" at <.isOrientRight>: isOrientRight is an unexported field of struct type main.Category
在 Go Playground 上查看代码的工作示例。
如果生活给你带来了模板,而模板出于某种原因具有 lower-case 变量名 - 可能是从 Pug 模板源构建的,该模板源也用于其他用途 - 有办法解决这个问题...
您可以使用 map[string]interface{}
来保存要传递到模板中的值,因此在上面的示例中:
juiceCategory := map[string]interface{}{
"ImageURL": "lemon.png",
"Title": "Juices and Mixes",
"Description": `Explore our wide assortment of juices and mixes expected by
today's lemonade stand clientelle. Now featuring a full line of
organic juices that are guaranteed to be obtained from trees that
have never been treated with pesticides or artificial
fertilizers.`,
"isOrientRight": true,
}
现在无需更改模板...
所以我正在做一个简单的 if 检查来自结构的 bool 但它似乎不起作用,它只是停止渲染 HTML.
所以下面的结构是这样的:
type Category struct {
ImageURL string
Title string
Description string
isOrientRight bool
}
现在我有了该类别结构的一部分,我可以用一个范围来显示它。
下面是一个结构的例子:
juiceCategory := Category{
ImageURL: "lemon.png",
Title: "Juices and Mixes",
Description: `Explore our wide assortment of juices and mixes expected by
today's lemonade stand clientelle. Now featuring a full line of
organic juices that are guaranteed to be obtained from trees that
have never been treated with pesticides or artificial
fertilizers.`,
isOrientRight: true,
}
我尝试了多种方法,如下所示,但其中 none 有效:
{{range .Categories}}
{{if .isOrientRight}}
Hello
{{end}}
{{if eq .isOrientRight true}}
Hello
{{end}}
<!-- Print nothing -->
{{ printf .isOrientRight }}
{{end}}
您必须从模板中导出您想要访问的所有字段:将其首字母更改为大写 I
:
type Category struct {
ImageURL string
Title string
Description string
IsOrientRight bool
}
以及对它的每一次引用:
{{range .Categories}}
{{if .IsOrientRight}}
Hello
{{end}}
{{if eq .IsOrientRight true}}
Hello
{{end}}
<!-- Print nothing -->
{{ printf .IsOrientRight }}
{{end}}
每个未导出的字段只能从声明包中访问。您的包声明了 Category
类型,而 text/template
and html/template
是不同的包,因此如果您希望这些包能够访问它,则需要导出它。
Template.Execute()
returns 一个错误,如果你已经存储/检查它的 return 值,你会立即发现它,因为你会得到一个类似于这个:
template: :2:9: executing "" at <.isOrientRight>: isOrientRight is an unexported field of struct type main.Category
在 Go Playground 上查看代码的工作示例。
如果生活给你带来了模板,而模板出于某种原因具有 lower-case 变量名 - 可能是从 Pug 模板源构建的,该模板源也用于其他用途 - 有办法解决这个问题...
您可以使用 map[string]interface{}
来保存要传递到模板中的值,因此在上面的示例中:
juiceCategory := map[string]interface{}{
"ImageURL": "lemon.png",
"Title": "Juices and Mixes",
"Description": `Explore our wide assortment of juices and mixes expected by
today's lemonade stand clientelle. Now featuring a full line of
organic juices that are guaranteed to be obtained from trees that
have never been treated with pesticides or artificial
fertilizers.`,
"isOrientRight": true,
}
现在无需更改模板...