[Django] Shopping Mall (1)
장고에서 템플릿 쉽게 관리하기
초기설정 편하게 하기
이번 토이 프로젝트의 목표는 다음과 같다.
- 이전에 개발하면서 불편했던 부분 개선
- 구현하면서 대충 넘어갔었던 기본 원리에 좀 더 집중
장고에서 templates 폴더 관리하기
장고에서 templates 관리의 디폴트는 본인이 만든 app 폴더에 templates -> app 이름의 폴더다.
문제점
하지만 토이 프로젝트를 할 당시 기능 추가를 할 수록, 앱의 종류가 많아질수록 너무 헷갈렸다. 이 부분을 해결하려고 다른 사람들은 어떻게 하나 구글링을 해보니 대부분 templates 폴더를 따로 만들어서 관리하는 사람들이 많았다.
settings.py
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': ['templates'],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
- 생각보다 방법은 간단하다. 기존의 디폴트 설정을 바꿔주려면 되는데 TEMPLATES 부분에서
DIRS : []
이부분의 경로를 설정 해주면 끝이다. -
- 예를 들어 위처럼 templates라는 폴더로 경로를 설정해 두었다면
return render(request, 'ddd/ddd.html')
이렇게 호출하면된다. - 진짜 앱 5개만 넘어가도 헷갈려서 머리아프니 templates도 한 곳에 모아서 관리하는게 정신건강에 이롭다.
static 폴더 설정
Django collectstatic
- 웹 어플리케이션은 웹 서버가 받은 요청을 넘겨주면 로직에 맞추어 데이터를 처리한 후 웹 서버에게 돌려주어 사용자에게 응답하게 하는 역할을 한다.
- 하지만 사실 사용자에게 응답하는 것은 웹서버 자체에서 할 수 있기 때문에 굳이 웹 어플리케이션에서 처리할 필요가 없다.
- 오히려 웹 어플리케이션을 거치게 되면 wsgi(웹서버와 웹 애플리케이션 간의 통신을 위한 이터페이스)를 거쳐야하므로 비효율적인 로직이 하나 더 늘어난다.
- 이러한 이유로 Django에서는 static 파일을 직접 처리하는 기능을 담고있지 않다.
- 따라서 프로젝트를 실제로 배포할 때 collectstatic을 통해 프로젝트에 흩어져 있는 파일들을 한 곳에 모은 뒤에 서버로 복사해줘야 한다.
settings.py 설정
BASE_DIR = Path(__file__).resolve().parent.parent
STATIC_URL = 'static/'
STATIC_ROOT = BASE_DIR /'static'
STATICFILES_DIRS = [
'greatkart/static',
]
우선 static 파일 설정부터 해주는데 기존과 동일하다.
상황에 따라 STATICFILES_DIRS = [BASE_DIR / 'static']
이렇게 리스트 형태로 담아줘도 상관 없다.
참고 : https://blog.hannal.com/2015/04/start_with_django_webframework_06/
- 최종 배포 전에
python manage.py collectstatic
를 해서 파일을 한 곳에 모아두기만 하면 된다. - 그럼 알아서 해당 경로에 static 파일들이 모아진 폴더가 만들어지고
{% load static %}
만 잘 호출해주면 된다.
댓글남기기