Простой если не работает иди шаблон
Так что я делаю простую проверку 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,
}
Я пробовал несколько способов, как показано ниже, но ни один из них не сработал:
{{range .Categories}}
{{if .isOrientRight}}
Hello
{{end}}
{{if eq .isOrientRight true}}
Hello
{{end}}
<!-- Print nothing -->
{{ printf .isOrientRight }}
{{end}}
2 ответа
Вы должны экспортировать все поля, к которым хотите получить доступ, из шаблонов: измените первую букву на заглавную 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
а также html/template
Это разные пакеты, поэтому вам нужно экспортировать их, если вы хотите, чтобы эти пакеты имели к ним доступ.
Template.Execute()
возвращает ошибку, если бы вы сохранили / проверили ее возвращаемое значение, вы бы узнали об этом немедленно, так как вы получите ошибку, подобную этой:
template:: 2: 9: выполнение "" в <.isOrientRight>: isOrientRight - это неэкспортированное поле типа структуры main.Category
Смотрите рабочий пример вашего кода на игровой площадке Go.
Если жизнь накладывает на вас шаблоны, которые по какой-то причине имеют имена переменных в нижнем регистре - возможно, построенные из источника шаблонов 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,
}
и теперь нет необходимости менять свой шаблон...