2014-11-29 1 views
5

Go 템플릿을 사용하여 배열을 반복하고 싶습니다. 루프의 마지막 항목에 추가 문자열을 추가하고 싶습니다.python loop.last 대신 시도하십시오

파이썬에서, 내가

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

가 이동과 같은 일을 달성하기 위해 상대 할 수있는 아래의 이동 상당의 조각입니다.

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

감사합니다.

답변

2

목록이 비어 있지 않으면 Python 스 니펫은 마지막 항목 다음에 세미콜론을 인쇄합니다. 범위에서 범위를 둘러싸고 if를 사용하여 슬라이스에 적어도 하나의 요소가 있는지 확인하고 인쇄하여 동일한 결과를 얻을 수 있습니다. 루프 바깥 쪽.

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

마지막 스 니펫은 마지막 항목의 끝에 추가하기 때문에 작동합니다. 좀 더 일반적인 솔루션은 사용자 정의 템플릿 기능이 필요합니다. 여기에 예제 기능입니다 :

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 
} 

여기에 템플릿을 사용하는 방법은 다음과 같습니다

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

내가 놀이터에 a working example of the custom function을 기록했다.

-1

pongo2은 Django 템플릿 구문 (Jinja2와 비슷 함)을 지원하는 것을 목표로합니다. 템플릿 코드는 약간의 변경으로 pongo2에서 작동합니다. 놀이터에서 this example을 (를) 참조하십시오.