본문 바로가기
source-code/Django

Books App _ Template 상속하기

by mattew4483 2020. 12. 30.
728x90
반응형

앱을 만들다 보면 다른 페이지라도 같은 속성을 공유하는 부분이 많다.

네브바처럼 어느 페이지에 가도 변함없는 부분 말이다.

이를 만들기 위해서는 모든 페이지에 똑같은 내용을 복사 붙여 넣기... 해도 되지만.

더 좋은 방법이 있다.


위와 같은 순간을 위해 django에서는 상속 이라는 기능을 만들어뒀다. 개발자 만세!

즉 기본 틀이 되는 html(여기서는 base.html)을 만들어두면,

간단한 코드 몇 줄로 해당 html의 양식을 어디서나 쓸 수 있는 것.

 

settings.py

이를 위해 우선 django에 templates를 연결했음을 알려줘야 한다.

settings.py에서 DIRS 부분에 os.path.join(BASE_DIR, 'templates')를 적어주자.

 

base.html

기본 틀의 뼈대가 될, base.html을 만들어주자.

 

이때 base.html은 개별 App의 템플릿이 아닌, 공통으로 사용할 템플릿이다!

그렇기 때문에 books와 polls 앱 내가 아닌, 최상위에 templates라는 폴더를 새로 만들어 html을 만들어두자.

 

우선 제일 위에 {% load static %}을 적어, static이라는 사용자 정의 태그를 로딩해준다.

이를 통해 해당 내용 밑, 즉 base.html 전체가 새로운 static으로 load된 것이라 생각하면 된다.

이렇게 load된 static을 다른 html에서도 extends를 통해 사용할 수 있는 것!

 

그런데 base.html 중에서도 상속하고 싶은 부분과 그렇지 않은 부분이 나뉠테다.

이 때 상속하고 싶지 않은 부분은 {% block 지정 이름 %} -- {% endblock %}으로 감싸주면 된다.

즉 해당 부분에만 구멍을 뚫어둔다(다른 html에서는 해당 자리에 다른 내용 쓸 수 있도록)고 생각하면 될 듯!

 

base_books.html

다음은 뼈대인 base.html을 상속받은 book_base.html을 만들어준다.

마찬가지로 최상위 temlplates 폴더에!

 

head부분에서 base.html을 상속! → {% extends "base.html" %}

이로써 아까 전 block으로 구멍을 뚫은 부분을 제외한 base.html의 모든! 내용이 book_base.html에도 전달되었다.

 

여기서도 구멍내고 싶은 부분을 {% block 지정 이름 %}으로 감싸주면 된다.

이 때, 구멍낸 부분을 부모(base.html)와 똑같이 하고 싶다면?

{{block.super}}을 사용해 이 부분은 base.html에서 감싸줬던 녀석들과 똑같은 걸 쓴다고 알려주면 된다!

 

이 경우 현재 sidebar 블록은 base.html의 Project와 Admin이라는 링크에다가,

Books_Home이라는 링크가 합쳐진 형태가 된다.

 

즉 뼈대인 base.html을 상속받은 book_base.html을 만들었고,

이제 book_base.html을 각 html상에 다시 상속할 예정!

 

book_index.html

역시나 {% extends "base_books.html %}을 통해 base_books.html을 상속받았음을 알려주자.

 

이 요소들을 상속받고자 하는 html 상에도 똑같이 적어주면...

쨔잔. django의 Admin페이지 스타일시트가 사용된 것을 볼 수 있다.

또한 상속했던 Project, Admin, Books_Home이라는 링크가 모든 페이지에 들어가 있다. 성공!

728x90
반응형

'source-code > Django' 카테고리의 다른 글

Books App _ log 만들기  (0) 2020.12.30
Books App _ home 만들기  (0) 2020.12.30
Books App  (0) 2020.12.29
Polls App  (0) 2020.12.28
자잘자잘 문제들  (0) 2020.11.03