Python/Flask

[Flask] Jinja 문법 비교 (Include vs extends)

yubi5050 2022. 5. 13. 18:31

프로젝트를 진행 하다보니 긴 html 코드 파일을 분리할 방법을 찾아보다가, Flask의 Jinja2 에서 제공하는 {% Include %} 와 {% extends %} 를 알게 되었고, 두 기능이 유사하여 차이점을 정리 해보았다.

 

1. Jinja Include 문법

  • {% Include 'a.html' %} 코드를 작성하고 nav.html, div1.html 등으로 저장
  • main.html 에서 {% include 'nav/nav.html' %} 등으로 사용
  • 복잡한 div 구조를 가지거나 공통되는 영역 (nav 등)이 있을 때 빼서 쓰기 좋다.
  • 사용 예시 1) nav.html 을 작성해두고 각 page에서 nav를 참조해 쓴다.

GIt 코드 링크

 

GitHub - SeonminKim1/Python: Python Framework & Libary

Python Framework & Libary. Contribute to SeonminKim1/Python development by creating an account on GitHub.

github.com

 

2. Jinja extends 문법

  • {% extends %} {% block %} {% endblock %} 등이 사용 됨
  • 상속 기능이라고 보면 되며, 부모의 템플릿을 받아서 자식이 Custom 하여 사용 가능 한 것.
  • 동일한 페이지가 비슷한 부분이 많은데, 
  • 정리 문서 링크 : https://yubi5050.tistory.com/25
 

Flask Jinja 정리

Flask에서는 Jinja2 라는 템플릿 엔진을 통해 웹 화면 구성을 보다 동적으로 가능하게 함 애플리케이션 내 변수, 조건문, 반복문 등을 랜더링 함 Jinja2 홈페이지 https://jinja.palletsprojects.com/en/3.1.x/ Ji..

yubi5050.tistory.com

Git 코드 링크

 

GitHub - SeonminKim1/Python: Python Framework & Libary

Python Framework & Libary. Contribute to SeonminKim1/Python development by creating an account on GitHub.

github.com

 

 

결론

  • 둘의 가장 큰 차이는 그대로 쓸지, Custom 해서 쓸지의 차이이다.
  • 코드를 단순 분리하고 싶고, 공통의 영역이 변화 없이 쓸 때 => include
  • 부모의 템플릿을 이어 받아 약간의 변화만 주면서 (footer영역만 색을 계속 바꾼 다던지) 사용 => extend

 

참고 링크

- https://stackoverflow.com/questions/2863695/include-vs-extends-in-django-templates // StackOverflow의 Extends와 include의 차이 질문