템플릿 엔진
template 엔트리는 CloudyKit Jet set과 template source를 설정합니다.
이 페이지는 설정 레퍼런스입니다. YAML fence는 기존 entry list에 사용할 fragment이며, 각 template을 같은 프로젝트 또는 설치된 module graph의 참조된 template.set과 결합하십시오.
엔트리 종류
| 종류 | 설명 |
|---|---|
template.set |
공유 설정이 있는 템플릿 세트 |
template.jet |
개별 템플릿 |
템플릿 세트
세트는 관련 템플릿을 포함하는 네임스페이스입니다. 세트 내의 템플릿은 설정을 공유하고 이름으로 서로 참조할 수 있습니다.
- name: views
kind: template.set
모든 template-set 설정은 선택 사항입니다.
| 필드 | 타입 | 기본값 | 설명 |
|---|---|---|---|
engine.development_mode |
bool | false | 템플릿 캐싱 비활성화 |
engine.delimiters.left |
string | {{ |
변수 시작 구분자 |
engine.delimiters.right |
string | }} |
변수 종료 구분자 |
engine.delimiters.comment_left |
string | {* |
검증만 수행, 주석은 항상 Jet의 {*를 사용 |
engine.delimiters.comment_right |
string | *} |
검증만 수행, 주석은 항상 Jet의 *}를 사용 |
engine.extensions |
string[] | [.jet, .html.jet, .jet.html] |
검증만 수행, 이름 조회는 항상 Jet 내장 .jet, .html.jet, .jet.html을 시도 |
engine.globals |
map | - | 모든 템플릿에서 사용 가능한 변수 |
런타임에서 development_mode, 왼쪽 및 오른쪽 expression delimiter, globals가 Jet set을 설정합니다. comment-delimiter 및 extension field는 이 릴리스에서 허용되고 검증되지만 in-memory Jet loader가 적용하지 않습니다. 이를 변경해도 parsing이나 template discovery가 달라지지 않습니다.
템플릿
템플릿은 세트에 속하며 내부 해결을 위해 이름으로 식별됩니다.
- name: layout
kind: template.jet
set: app.views:views
source: |
<html>
<body>{{ yield content() }}</body>
</html>
- name: home
kind: template.jet
set: app.views:views
source: |
{{ extends "layout" }}
{{ block content() }}
<h1>Welcome, {{ name }}</h1>
{{ end }}
| 필드 | 타입 | 필수 | 설명 |
|---|---|---|---|
set |
reference | 예 | 부모 템플릿 세트 |
source |
string | 예 | inline template content 또는 manifest-relative file:// reference |
relative file:// reference는 entry가 포함된 manifest 기준으로 로드되며 해당 manifest filesystem 밖으로 나갈 수 없습니다. 결과 template source 안의 environment placeholder는 environment system에서 resolve되지 않고 template text로 유지됩니다.
템플릿 해결
템플릿은 registry ID가 아닌 이름으로 서로 참조합니다. 이름은 set 안에서 resolve됩니다.
- 기본적으로 레지스트리 엔트리 이름(
entry.ID.Name)이 템플릿 이름이 됩니다 - 커스텀 명명을 위해
meta.name으로 오버라이드:
- name: email-welcome-v2
kind: template.jet
set: app.emails:templates
meta:
name: welcome
source: |
{{ include "header" }}
Hello {{ user }}!
이 템플릿은 세트에 welcome으로 등록되므로 다른 템플릿은 {{ include "welcome" }} 또는 {{ extends "welcome" }}을 사용합니다.
상속
템플릿은 부모 템플릿을 확장하고 블록을 오버라이드할 수 있습니다:
# Parent defines yield points
- name: base
kind: template.jet
set: app.views:views
source: |
<html>
<head><title>{{ yield title() }}</title></head>
<body>{{ yield body() }}</body>
</html>
# Child extends and fills blocks
- name: page
kind: template.jet
set: app.views:views
source: |
{{ extends "base" }}
{{ block title() }}My Page{{ end }}
{{ block body() }}<p>Content here</p>{{ end }}
Lua API
rendering 작업은 템플릿 모듈을 참조하십시오.
참고
- 템플릿 모듈 - Lua API 레퍼런스
- 파일시스템 - disk에서 template 로드
- HTTP 엔드포인트 - request handler에서 template rendering