Template과 static의 디렉토리 구조

MoonLight·2021년 8월 5일
0

django

목록 보기
8/20
post-thumbnail

우리는 지금껏 이유도 모른채 Template과 static의 디렉토리 구조를 아래처럼 샌드위치 구조로 만들었었다.

💡 왜 샌드위치 구조로 만들어야 하는걸까??

  • 문제점이 무엇인지 한번 살펴보도록 하자.

  • 위와 같이 한 프로젝트에 A app과 B app을 생성하고 templates안에 A와 B디렉토리 없이(샌드위치 구조 없이) 바로 index.html을 넣어보자.


  • 그리고 위처럼 INSTALLED_APPS에 A와 B 앱을 등록해주고,

  • project app의 urls.py에 문자열패턴매칭이 /A일 때 A.urls로, /B일 때 B.urls로 불러오게 한다.



  • 그리고 A,B app 각각의 urls.py에 /index 문자열패턴이 매칭되면, viewsindex함수를 호출하도록 한다.



  • A,B app의 view.py에서는 index.html을 render하여 리턴시켜준다.

  • 아래 그림은 index.html 내용이다.

그렇다면 https://domain/A/index 를 입력하면 A app의 index 템플릿화면을 뿌려줄 것이고, https://domain/B/index 를 입력하면 B app의 index 템플릿을 뿌려줄 것이다. 한번 볼까?

??? A app 의 index 템플릿은 잘 나왔는데, B app의 index 템플릿은 안나오고 A app의 index 템플릿이 나왔다.. 이게 샌드위치 구조를 하지 않았을 때의 문제이다. settings.py 파일을 살펴보도록 하자.

  • 위 setting.py에 APP_DIRSTrue로 설정되어있는데 이는 각각의 앱에 templates 디렉토리가 있으니 template을 찾을 때 templates 디렉토리에서 찾아라는 의미이다.
  • 즉, https://domain/B/index 를 입력했을 때 B app views.py에서 index함수가 index.html을 리턴시켜주어야 하는데 이 index 템플릿을 templates 디렉토리에서 찾는다.
  • 하지만, 앱이 여러개일 경우 templates 디렉토리도 여러개일 텐데 어떤 templates 디렉토리에서 찾아야 하는가?? 바로 아래 그림의 INSTALLED_APP 리스트 순서대로 각 앱의 templates에 index 템플릿이 존재하는지 여부를 체크한다.
  • 따라서, INSTALLED_APPS에 A app이 먼저 등록되어 있으므로 A의 template 디렉토리에서 index 템플릿을 찾아서 뿌려주는 것이다.

이러한 문제를 방지하기 위해 샌드위치 구조로 B/template/B/index.html 과 같이 앱이름과 동일한 디렉토리를 중간에 끼워넣어서 render(request, 'B/index.html')로 렌더링 시키면 서로 겹칠일이 없으므로, 프로젝트 규모가 커지면 커질수록 샌드위치 구조의 필요성이 대두된다.

profile
hello world :)

0개의 댓글