1. 핵심 역할
Velocity 템플릿 엔진은 #include / #parse 로 템플릿 재사용을 구현합니다.
페이지 상단 네비게이션 _head.htm, 하단 저작권 정보 _footer.htm 같은 공통 부분을 별도 서브템플릿으로 분리해서 불러오면 HTML 코드 중복을 피할 수 있습니다.
2. 두 지시자의 핵심 차이
1. #include("파일경로")
파일 원문을 그대로 출력만 할 뿐, 서브템플릿 안의 Velocity 변수($!{xxx})는 해석하지 않습니다
- 서브템플릿 안의
$!{testinclude}는 렌더링되지 않고 문자열 그대로 출력됩니다$!{testinclude} - 여러 파일을 한 번에 불러오기 지원:
#include("a.htm","b.htm") - 적합:변수가 없는 순수 정적 HTML, 정적 코드 조각
2. #parse("파일경로")
서브템플릿을 불러오고 Velocity 문법을 전부 해석합니다. 부모 템플릿에서 넘긴 변수가 서브템플릿에서 정상적으로 렌더링됩니다.
- 서브템플릿의
$!{testinclude}는 컨텍스트 변수를 읽어 백엔드에서 전달한 값으로 교체됩니다 - 단일 파일 경로만 허용하며 여러 파일을 동시에 불러올 수 없습니다
- 적합:변수를 사용하는 공통 헤더, 푸터 등의 템플릿(페이지 제목, 동적 저작권 문구 등)
메모 노트 내용:
#include는 서브템플릿 코드를 그대로 붙여넣을 뿐 해석하지 않고, #parse는 문법 해석을 진행합니다
3. 실제 예시
1. 백엔드 코드(.cs)
context.Put("testinclude", "서브템플릿 문자열:");Code language: JavaScript (javascript)
2. 서브템플릿 _footer.htm 내용
저작권 정보 $!{testinclude}
케이스① #include("./themes/default/_footer.htm") 사용
페이지 출력 결과:
저작권 정보 $!{testinclude}
변수가 해석되지 않고 플레이스홀더 그대로 출력됩니다.
케이스② #parse("./themes/default/_footer.htm") 사용
페이지 출력 결과:
저작권 정보 서브템플릿 문자열:
변수가 정상적으로 렌더링됩니다. 실제 프로젝트에서 헤더·푸터 공통 템플릿에#parse를 우선 사용하는 이유입니다.
4. 사용 시나리오 권장
| 지시자 | 적합한 사용처 |
|---|---|
#include | 정적 자원, 순수 텍스트, 변수 렌더링이 필요 없는 정적 HTML 조각 |
#parse | 공통 헤더, 푸터, 사이드바;$변수, #if 등 VTL 문법이 포함된 템플릿 |
💡 개발 규칙:
동적 변수가 쓰일 가능성이 있는 네비게이션, 푸터 저작권 등 공통 컴포넌트는 #parse를 사용하고, 완전 정적 텍스트나 스타일 조각에는 #include를 사용합니다.
템플릿 재사용
Previous: 템플릿 안에서 변수 설정하기
Next: 주석