docs/content/templates/selection.ko.md (1898B)
1 +++
2 title = "템플릿 선택"
3 description = "네 단계, 순서대로, 캐스케이드 없이"
4 weight = 10
5 toc = true
6 +++
7
8 페이지는 아래 중 **가장 먼저 존재하는** 것으로 렌더됩니다.
9
10 1. 페이지 front matter의 `template`
11 2. 페이지가 섹션 인덱스면 `section.html`
12 3. 부모 섹션 `_index.md`의 `page_template`
13 4. `page.html`
14
15 규칙은 이게 전부입니다. 존재하지 않는 `template`을 지정하면 에러이고, 메시지에
16 지금 갖고 있는 템플릿 목록이 같이 나옵니다.
17
18 ## 왜 스무 단계가 아니라 네 단계인가
19
20 Hugo는 kind × section × type × layout × language × output format을 곱해 만든
21 lookup order로 템플릿을 찾습니다. 더 강력하고, 동시에 Hugo 사용자가 가장 많이
22 헤매는 바로 그 지점입니다. "어느 템플릿이 선택됐는지 출력이라도 해 달라"는 요청이
23 10년째 열려 있습니다.
24
25 머릿속에 담기는 네 단계에는 그런 명령이 필요 없습니다. 어느 템플릿이 이 페이지를
26 렌더했는지 알 수 없다면, 그 규칙은 너무 복잡한 것입니다.
27
28 ## 섹션 기본값 지정하기
29
30 ```toml
31 # content/blog/_index.md
32 +++
33 title = "블로그"
34 page_template = "post.html"
35 +++
36 ```
37
38 이제 `content/blog/`의 페이지들은 자기 것을 지정하지 않는 한 `post.html`로
39 렌더됩니다. 직속 자식에게만 적용되며, 하위 섹션은 자기 것을 따로 정합니다.
40
41 ## base 상속하기
42
43 보통은 스켈레톤 하나에 얇은 템플릿을 얹는 구성을 씁니다.
44
45 ```html
46 {# templates/base.html #}
47 <!doctype html>
48 <html lang="{{ page.language }}">
49 <head><title>{{ page.title }}</title></head>
50 <body>{% block content %}{% endblock %}</body>
51 </html>
52 ```
53
54 ```html
55 {# templates/page.html #}
56 {% extends "base.html" %}
57 {% block content %}<article class="prose">{{ page.content | safe }}</article>{% endblock %}
58 ```