Как рассчитать что-то в html / template - PullRequest
0 голосов
/ 15 октября 2018

Как вы можете вычислить что-то внутри html-шаблона go?

Например:

{{ $length := len . }}
<p>The last index of this map is: {{ $length -1 }} </p>

Была ли . карта.
Код {{ $length -1 }} не работает, есть ли способ добиться этого?

Ответы [ 3 ]

0 голосов
/ 15 октября 2018

Вы не можете.Шаблоны не являются языком сценариев.Согласно философии проектирования, сложная логика должна быть вне шаблонов.

Либо передать вычисленный результат в качестве параметра (предпочтительный / самый простой), либо зарегистрировать пользовательские функции, которые вы можете вызывать во время выполнения шаблона, передать им значения и которыеможет выполнять вычисления и возвращать любые значения (например, return param - 1).

Примеры регистрации и использования пользовательских функций см .:

Шаблоны Golang (и передача функций в шаблон)

Как получить доступ к полю объекта по переменной в шаблоне?

Итерировать карту Го, получить индекс .

0 голосов
/ 15 октября 2018

Остальные ответы верны, вы не можете сделать это в самом шаблоне.Тем не менее, вот рабочий пример использования Funcs:

package main

import (
    "fmt"
    "html/template"
    "os"
)

type MyMap map[string]string

func LastMapIndex(args ...interface{}) string {
    if m, ok := args[0].(MyMap); ok && len(args) == 1 {
        return fmt.Sprintf("%d", len(m) - 1)
    }
    return ""

}

func main() {
    myMap := MyMap{}
    myMap["foo"] = "bar"

    t := template.New("template test")
    t = t.Funcs(template.FuncMap{"LastMapIndex": LastMapIndex})
    t = template.Must(t.Parse("Last map index: {{.|LastMapIndex}}\n"))
    t.Execute(os.Stdout, myMap)
}

Детская площадка: https://play.golang.org/p/YNchaHc5Spz

0 голосов
/ 15 октября 2018

Вы можете использовать FuncMap как this .Как только вы определили функцию в funcmap, вы можете использовать ее в HTML.В вашем случае вы можете определить функцию MapLength или что-то подобное, которая вычисляет длину данной карты и возвращает ее для вас.Затем вы можете вызвать его в шаблоне примерно так:

<p>The last index of this map is: {{ .MapLength . }} </p>
...