Простой если не работает иди шаблон

Так что я делаю простую проверку 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,
}

и теперь нет необходимости менять свой шаблон...

Другие вопросы по тегам