Django бросает TemplateDoesNotExist для шаблона, расположенного в подпапке 'my_app/templates/my_app'
Я изучаю Django и застрял прямо на первом проекте. Я получил исключение TemplateDoesNotExist при доступе к индексной странице моего приложения. Я видел здесь много похожих вопросов, но ответы, похоже, относятся к немного другим случаям или более старым версиям Django.
Вскрытие шаблона-загрузчика показывает, что Django искал индексную страницу (index.html) в каталоге 'movies/templates', в то время как файл размещен в каталоге 'movies/templates/movies', как советуют руководства.
Информация о проекте
'movies' добавляется в список INSTALLED_APPS в settings.py
А movies/views.py ссылается на index.html следующим образом:
def all_films(request):
return render(request, 'index.html', {'movies': my_movies, 'director': settings.DIRECTOR})
Что сработало
Добавление 'os.path.join(BASE_DIR, 'movies', 'templates', 'movies'),' к значениям TEMPLATES['DIRS'] в settings.py заставляет его работать, но после прочтения руководств и ответов на те же вопросы я предполагаю, что это не должно быть обязательным
Кроме того, если я изменю movies/views.py так, чтобы он ссылался на 'movies/index.html' вместо 'index.html', все работает. Но является ли хорошей практикой использование имени приложения в таких ссылках? Я имею в виду, что это может быть трудно поддерживать в будущем и т.д.
Вопрос
В общем, вопрос в том, что я делаю/получаю не так. Не могли бы вы подсказать, что еще нужно проверить, чтобы заставить его работать в состоянии по умолчанию без ручного редактирования свойства TEMPLATES' DIRS?
P.S. Я использую Django 3.2.7, OS - Ubuntu.
Проверьте, есть ли 'APP_DIRS': True в settings.py>TEMPLATES
Это должно сработать!
settings.py
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [BASE_DIR / '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',
],
},
},
]
views.py
def all_films(request):
return render(request, 'movies/index.html', {'movies': my_movies, 'director': settings.DIRECTOR})