티스토리 뷰
여러 템플릿 파일 별로 필연적으로 발생하는 중복을 상속을 통해 중복 제거 상속은 여러 번 이뤄질 수 있다.
부모 템플릿은 전체 레이아웃을 정의하며, 자식 템플릿이 재정의할 block 을 다수 정의해야 한다.
자식 템플릿은 부모 템플릿을 상속받은 후에 부모 템플릿의 block 영역에 대해 재정의만 가능하며 그 외 코드는 무시
템플릿 상속 문법 : 항시 자식템플릿 코드 내, 최상단에 쓰여져한다.
{% extends "부모템플릿경로" %}
템플릿 상속을 사용 전
# /blog/templates/blog/post_list.html <!doctype html> <html> <head> <meta charset="utf-8" /> <title>AskDjango Blog</title> </head> <body> <h1>AskDjango Blog</h1> {% for post in post_list %} <a href="{% url "blog:post_detail" post.id %}">{{ post.title }}</a> {% endfor %}
<hr/> © 2017. AskDjango </body> </html> # /blog/templates/blog/post_detail.html <!doctype html> <html> <head> <meta charset="utf-8" /> <title>AskDjango Blog</title> </head> <body> <h1>AskDjango Blog</h1>
<h2>{{ post.title }}</h2> {% if post.image %} <img src="{{ post.image.url }}" /> {% endif %} {{ post.content|linebreaks }} <hr/> © 2017. AskDjango </body> </html> ## 회색 표시 부분 post_list.html 과 post_detail.html의 중복 발생 |
템플릿 상속 사용 후
# blog/templates/blog/post_list.html {% extends "blog/layout.html" %} {% block content %} # 재정의할 블락 {% for post in post_list %} <a href="{% url "blog:post_detail" post.id %}">{{ post.title }}</a> {% endfor %} {% endblock %}
# blog/templates/blog/post_detail.html {% extends "blog/layout.html" %} {% block content %} <h2>{{ post.title }}</h2> {% if post.image %} <img src="{{ post.image.url }}" /> {% endif %} {{ post.content|linebreaks }} {% endblock %} ## block정의 이후 block바깥쪽에 코드를 작성할 경우 전부 무시 된다. ## 재정의만 가능하다. 부모탬플릿에 정의가 되어있지 않으면 사용이 불가능 하다. |
부모 탬플릿의 구성
# blog/layout.html ## 중복이 발생 한 부분에 대해서 layout.html을 작성 <!doctype html> <html> <head> <meta charset="utf-8" /> <title>AskDjango Blog</title> </head> <body> <h1>AskDjango Blog</h1> {% block content %} ## 자식 영역이 body부분을 재정의 할수 있도록 block영역을 정의, 이름은 중복이 불가능하다. {% endblock %} <hr/> © 2017. AskDjango </body> </html> |
2단계의 상속을 추천
+ 프로젝트 전반적인 레이아웃 템플릿 : askdjango/templates/layout.html
- 각 앱 별 레이아웃 템플릿 #1 : blog/templates/blog/layout.html
- 각 템플릿 #1 : blog/templates/blog/post_list.html
- 각 템플릿 #2 : blog/templates/blog/post_detail.html
- 각 템플릿 #3 : blog/templates/blog/post_form.html
- 각 앱 별 레이아웃 템플릿 #2 : shop/templates/shop/layout.html
- 각 템플릿 #4 : shop/templates/shop/item_list.html
- 각 템플릿 #5 : shop/templates/shop/item_detail.html
- 각 템플릿 #6 : shop/templates/shop/item_order_form.html
(중요) 상속은 최상단에 써야 하며, 부모 탬플릿에서 정의되지않은 block은 자식탬플릿에서도 정의가 불가능 하다. 무조건, 부모탬플릿에 정의된 block만 사용 가능
"""본 내용은 AskDjango VOD, "장고 차근차근 시작하기" 강의내용을 참고하여 작성했습니다.(https://nomade.kr/)"""
'Python > * Django' 카테고리의 다른 글
12. URL Reverse (0) | 2017.12.13 |
---|---|
11. Django Template Loader (0) | 2017.12.13 |
9. Model Relationship Fields (2) | 2017.12.13 |
8. Http Status Code 404 (0) | 2017.12.13 |
7. 모델을 통한 데이터 CRUD (0) | 2017.12.12 |