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})
Вернуться на верх