django.template.exceptions.TemplateDoesNotExist 오류
django로 프로젝트를 시작해 보자.
우선 설치한다.
pip install django
프로젝트를 만든다.
django-admin startproject cctv_dashboard
앱을 만든다.
python manage.py startapp member
이제 앱에 간단한 페이지를 만들어 보자.
settings.py 에 앱을 추가한다.
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'member'
]
여기에서는 'member'를 추가했다.
member 앱 안에 있는 views.py에 코드를 추가한다.
from django.shortcuts import render
def index(request):
return render(request, 'member/index.html')
위 index.html 파일을 만들어 보자
우선 member 앱 안에 templates 디렉토리를 만든다.(템플릿을 위한 디렉토리로 철자를 조심한다.)
그 안에 member 디렉토리를 만들고 간단하게 index.html 을 만든다.
member 앱안에 urls.py를 새로 만들어 맵핑을 위한 코드를 넣는다.
# urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index')
]
마지막으로 프로젝트 안의 urls.py에 위 url을 추가한다.
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('member.urls'))
]
이제 서버를 띄어보자.
python manage.py runserver
서버가 잘 뜬다.
이제 만든 페이지를 호출해보자.
오잉? 잘 뜨네? 분명 django.template.exceptions.TemplateDoesNotExist가 났었는데 잘 되네?
전에 장고로 프로젝트를 만들었을 때 위와 같이 하면 잘 됐다. 그런데 이번에 다시 해보니 위 오류가 나왔다.
해결한 방법은 settings.py에 'TEPLATE_DIR'을 정의하고 이를 'TEMPLATES'안에 추가했더니 잘 동작하는 것을 확인했다.
# settings.py
BASE_DIR = Path(__file__).resolve().parent.parent
TEMPLATE_DIR = os.path.join(BASE_DIR, 'templates')
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [TEMPLATE_DIR],
'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',
],
},
},
]
settings.py가 이전에 했던 프로젝트의 settings.py 구조가 조금 달라져 있길래 버전업하면서 템플릿 위치를 이제는 지정해야하는가? 생각하고 글을 작성중인데, 다시 위 TEMPLATE_DIR 부분을 삭제하고 재기동해도 그냥 잘 되었다.
뭘까?
아무것도 조작할 필요없이 원래대로 그냥 잘 되네...
그냥... 그렇다구...