템플릿 재사용

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를 사용합니다.

템플릿 재사용

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다