2012-01-16 6 views
1

거기에 JSML 객체를 가져 와서 HTML 템플릿 파일에 매핑하는 perl의 HTML :: Template과 비슷한 패키지가 있습니까? 나는 HTML :: Template을 사용하여 웹 애플리케이션을 구축 중이며 웹 서비스 API에서 JSOn을받을 것이다. HTML :: Template이 요구하는 정확한 방식 대신 HTML에 JSOn을 템플리트화할 수 있다면 간단하다.HTML :: Template Perl

답변

6

HTML :: Template는 문자열, 해시 및 배열로 구성된 데이터 구조를 취합니다. JSON은 바로 그 위에 매핑됩니다.

$template->param(myData => JSON::Any->new->decode($json_string)); 
+0

JSON 객체의 딥 (deep) 속성을 인쇄하고 싶다면 HTML 템플릿 코드는 어떻게 생겼을까요? – MadHacker

+0

[문서의 루프 섹션] (https://metacpan.org/module/HTML::Template#TMPL_LOOP)을보십시오 – Quentin

+0

이것은 1 또는 2 수준의 간단한 JSON 개체에서 작동하지만 TMPL_LOOP를 사용하면 최적이 아닙니다. 복잡한 JSON 데이터 구조. 그것은 성가신 못생긴 HTML 템플릿 코드로 이어집니다. 할 수있는 곳을 찾고 있었고 사용자의 주소가 들어있는 해당 사용자의 JSON 객체에 직접 액세스했습니다. JSON 객체의 구조를 알 필요가 있지만 그 사실을 알고 있습니다. – MadHacker

1

HTML::Template는하는 주형이 아니라 '단순한'엔진입니다 - 단순 당신이 Model View Controller 아키텍처에서 view 부분에 무엇을해야 당신이하자 때문에 따옴표를 사용하고 있습니다.

그러나 HTML::Template 안에 임의의 perl 코드를 실행할 수 없습니다.

또한 JSON에는 매우 복잡한 데이터 구조가있을 수 있으므로 템플릿에서 직접 JSON을 사용하는 적절한 방법이 있는지 의심 스럽습니다.

가능한 유일한 해결책은 JSON을 구문 분석 할 펄 스크립트를 사용하고 '개체'를 만들어 템플릿에 전달하는 것입니다. 이미 perl 스크립트가 있습니다 - HTML::Template 객체를 인스턴스화하는 스크립트입니다.

1

괜찮아요, 조금 늦었지만 : HTML :: Template은 항상 해시 배열 등의 해시를 원합니다. 이며 stash 매개 변수를 탐색 할 수 없습니다. 이렇게하려면 HTML :: Template :: Compiled를 시도해 볼 수 있습니다.

<tmpl_var some_hash.key.another_key[23] > 

또는 대체 구분 기호와

:

[%= some_hash.key.another_key[23] %] 

하지만 HTML :: 템플릿에 모듈의 문서화 차이를 확인합니다.

그래서 JSON 문자열을 데이터 구조로 디코딩하고이를 템플릿에 전달하면 구조 깊숙한 곳에있는 모든 값에 액세스 할 수 있습니다.

관련 문제