프리마커 템플릿 언어(Freemarker Template Language)를 이용해서 템플릿을 작성할 때, FTL이 제공하는 특별한 변수들을 알고 있으면 좀 더 템플릿을 잘 짤 수 있다.
이 특별 변수를 사용하기 위해서는 템플릿에서 .variable_name 형태로 써야한다. 즉, auto_esc라는 특별 변수를 템플릿에 사용하려면 .auto_esc로 쓰면 된다.
프리마커 템플릿 언어의 특별 변수들은 기본적으로 스네이크 표현법을 지원하며 2.3.23 버전부터 카멜 표기법도 제공된다.
Freemarker Special Variables
auto_esc
- auto-escaping 설정 여부를 나타내는 불리언 변수
caller_template_name
- 현재 macro 혹은 function이 호출된 템플릿의 이름(경로)
current_template_name
- 현재 템플릿의 이름(경로)
data_model
- 현재 템플릿이 넘겨 받은 데이터 모델로의 직접 접근(해시). global 디렉티브로 생성되는 변수는 볼 수 없음
error
- recover 디렉티브에서 사용되는 변수로 에러 메시지를 접근할 수 있음
globals
- data-model로 넘겨 받은 값과 global 디렉티브로 생성된 변수를 접근할 수 있는 해시. assign이나 macro에서 선언된 변수는 global이 아니라서 보이지 않음
incompatible_improvements
- 현재 프리마커 설정의 incompatible_improvements 설정 값
lang
- 현재 언어 설정. ex) .lang의 경우 en
locale
- 현재 로케일 설정. ex) .locale의 경우 en_US
locale_object
- 현재 로케일 설정 값을 java.util.Locale 객체로 반환. 자바 메소드와 함께 사용할 때 쓸 수 있음
locals
- 로컬 변수들에 접근할 수 있는 해시
main
- 메인 네임스페이스에 접근할 수 있는 해시. Data-model과 global 변수들은 보이지 않음
main_template_name
- 최상위 템플릿 이름을 리턴.
namespace
- 현재 네임스페이스에 접근할 수 있는 해시
node
- visitor 패턴으로 처리중인 현재 XML 노드
now
- 현재 date-time.
output_encoding
- 현재 출력의 캐릭터 셋(Charset)을 리턴
get_optional_template
- 존재하지 않을 수도 있는 템플릿을 처리할 때 사용될 수 있는 메소드.
- 실행 결과로 3가지 항목이 담긴 해시가 리턴됨
- exists : 템플릿이 존재하는지 여부
- include : 템플릿을 include 할 수 있는 메소드
- import : 템플릿을 import 할 수 있는 메소드
- 사용예
<#assign optTemp = .get_optional_template('some.ftl')>
<#if optTemp.exists>
Template was found:
<@optTemp.include />
<#else>
Template was missing.
</#if>
pass
- 아무것도 안함. XML 프로세싱에서 no-op 을 명시하기 위해 사용
url_escaping_charset
- URL을 인코딩하기 위해 사용해야 할 Charset 정보. 설정되어 있지 않다면, output_encoding 변수에 할당되어 있는 설정을 사용함
output_format
- 현재 변수의 출력 영역에서의 output format 정보. "HTML", "XML', "RTF", "plainText" 등.
vars
- 변수들에 접근. vars["varName"]은 varName과 동일
version
- 프리마커 버전 정보
이런 스페셜 변수들 중에는 상황에 따라서 Null 값을 리턴하는 경우도 있다. 따라서 정확한 사용방법은 프리마커의 관련 매뉴얼 페이지를 참고하기 바란다. (링크 : https://freemarker.apache.org/docs/ref_specvar.html )
댓글