2012-11-01 4 views
4

템플릿 툴킷을 사용하여 간단한 JSON 응답을 구성합니다 (아래 코드 참조). 마지막 부분을 제외하고 응답의 모든 요소 뒤에 쉼표를 넣어야합니다.템플릿 툴킷, 중첩 루프의 마지막 반복 테스트

나는 TT 반복기를 사용해야한다고 믿지만, 제대로하지는 않는다.
이 코드를 사용하면 쉼표가 여전히 마지막 요소의 끝에 인쇄됩니다.

문제는 외부 및 내부 루프가 마지막 반복에 있지 않는 쉼표를 추가해야

[% UNLESS outer.last && loop.last %],[% END %] 

이 들어있는 부분으로 자리 잡고 있습니다.

내가 잘못 된 것에 대한 도움은 크게 감사하겠습니다.

{ "success": true, "filesdata": [ 
[%~ USE outer = iterator(objects); FOREACH object IN outer; 
    FOREACH rep IN object.reps; 
     IF rep.rep == reptype %] 
{ "id":"[% object.id | xml %]", "url":"[% rep.src | xml %]", "story":"[% object.story | xml %]" }[% UNLESS outer.last && loop.last %],[% END %] 
     [%~ END; 
    END; 
END ~%] 
] } 

답변

5

가입 vmethod를 사용해 보셨습니까? 당신은 목록을 작성하고 쉼표로 가입 할 수 있습니다 :

[% items.join(', ') %] 

는 당신이 또한 Template::Plugin::SimpleJson보고 할 수 있음을 가졌어요. 해시를 만든 다음이 플러그인에 전달할 수 있습니다. 그러나 실제로 그렇게하기로 결정한 경우 실제 템플릿 파일에서 JSON을 인용하는 것에 대해 걱정할 필요가 없으며 이와 같은 것을 사용하면 줄줄이 줄어들 수 있습니다.

템플릿 자체 외부에서 JSON을 만드는 옵션도 있지만 질문 범위 밖에 있습니다.

+0

. 개인적으로 필자는 Template :: Plugin :: JSON :: Escape를 좋아하지만 중요한 것은 직접 만든 코드 생성을 피하는 것이다. 런타임에 예기치 않은 조건/값의 위험이 증가하여 템플릿이 폭발 할 수 있습니다. – RET

6

이것은 나를 위해 작동 : 나는 oalders이 플러그인을 사용하는 방법에 대한 말을 반복 할

[% IF loop.last %]}[% ELSE %]},[% END %]