템플릿 파일 모듈화 하기
210731
Extends - 화면 메인 영역 모듈화 하기
잠깐 이야기 할것이 있다. 많은 사람들이 오류가 나는 부분, AssertionError: 301 != 200 오류가 나는 사람들이 있을텐데. 강의에서 함수를 잘못 알려준 것 같다.
models.py
전자로 되어있으면 오류가 난다. 후자로 바꿔줄 것
post_detail.html과 post_list.html은 둘 다 동일한 navigation bar를 사용한다. 문제는, 이를 수정하려면 두번 수정해야 한다는 것. 만약 동일한 bar를 사용하는 html이 10개라면 10번 수정할 것인가?
아니다. 이럴 때는 따로 navigation bar를 관리하는 html을 만들 수 있다. 이를 base.html 이라고 하자
base.html
기존에 코드를 모두 여기로 붙여넣고 id가 main_area인 태그의 코드만 잘라낸 뒤 위와 같이 추가한다. 그리고 각각의 템플릿에 다음 코드를 추가하면 된다.
post_detail.html
post_list.html
두 템플릿의 네비게이션 바가 동일해진 모습
이렇게되면, 네비게이션 바를 수정할 때 base.html만 수정하면 된다. 이것이 바로 모듈화 하는 이유.
또, 타이틀을 다음과 같이 작성해 줄 수 있다.
base.html
이 코드 뜻은 Blog | 상만두의 웹사이트
라고 타이틀을 지정하되, head.title이 있다면 이 것으로 지정하라는 뜻이라고 한다. (나는 직관적으로 이해가 되지 않는 문법이다...)
그래서, post_detail도 수정해주면 된다.
post_detail.html
Include - 네비게이션바, 푸터 모듈화 하기
일단 예전에 프론트단계에서 사용하던 html 코드를 그대로 가져왔기 때문에, 네비게이션바의 링크들이 제대로 연동이 되어있지 않다. 이를 연동시켜주기 위해 다음을 추가해준다
tests.py
post_detail 이나 post_list나 둘다 nav가 공통이므로 nav를 함수로 처리할 수 있도록 했다.
따라서 soup를 인자로 받음
또, 링크를 연결해 주기 위해
navbar.find
를 사용해서 실제 텍스트를 찾고 이 텍스트의href
속성을 링크로 연결해준다.
또, footer나 navbar같은 것을 모듈화 할 필요가 있다. 이 때 footer.htm
l과 navbar.html
을 만든 뒤 해당 태그에 해당하는 코드를 각 파일에 잘라내어 붙여넣는다. 그 뒤, base.html
에는 다음과 같이 입력해주면 된다.
물론, 잘라낸 코드 위치에 해야 한다.
base.html
정리하자면, extends과 include 둘 다 템플릿을 불러온다는 점에서 동일하지만 기본이 되는base.html
파일을 기준으로 extends는 자신을 여러 템플릿에서 쓸 수 있도록 바깥으로 보내는 방향이라면, include는 다른 템플릿을 자신의 코드에 붙여넣을 수 있또록 안으로 가져오는 방향이다.
그래서 extends의 경우에는
post_detail.html
과post_list.html
이base.html
을 불러와서 쓸 수 있었으며, include의 경우에는footer.html
과navbar.html
를 불러와서base.html
에 쓸 수 있었다.
Last updated
Was this helpful?