2014-11-29 14 views
5

Szukam pętli nad tablicą z szablonami Go i chcę dodać dodatkowy ciąg do ostatniego elementu w pętli.Go alternatywą dla Pythona loop.last

W Pythonie mogę zrobić

{% for host in hosts %} 
{{ host }}{% if loop.last %} ;{% endif %} 
{% endfor %} 

Patrząc osiągnąć to samo z Go, poniżej znajduje się fragment równowartość Go.

{{ range $host := $hosts }} 
{{$host}} 
{{ end }} 

Dzięki.

Odpowiedz

2

Jeśli lista nie jest pusta, to fragment kodu Pythona wyświetla średnik po ostatnim elemencie. Możesz osiągnąć ten sam wynik w Go, otaczając zakres za pomocą, jeśli chcesz sprawdzić, czy jest co najmniej jeden element w plasterku i drukowanie; poza pętlą.

{{if $hosts}}{{range $host := $hosts}} 
{{$host}} 
{{ end }} ;{{end}} 

Ten fragment działa, ponieważ dodajesz do końca ostatniego elementu. Bardziej ogólne rozwiązanie wymaga niestandardowej funkcji szablonu. Oto przykład funkcja:

func last(v interface{}, i int) (bool, error) { 
    rv := reflect.ValueOf(v) 
    if rv.Kind() != reflect.Slice { 
    return false, errors.New("not a slice") 
    } 
    return rv.Len()-1 == i, nil 
} 

a oto jak wykorzystać go w szablonie:

{{range $i, $host := $hosts }} 
{{$host}}{{if last $hosts $i}} ;{{end}} 
{{ end }} 

I opublikował a working example of the custom function na plac zabaw.

-1

pongo2 ma na celu wspieranie składni szablonów Django (podobnej do wersji Jinja2). Twój kod szablonu zadziała w pongo2 z niewielką zmianą; zobacz this example na placu zabaw.

Powiązane problemy