Выдается ошибка Template does not exist (Django)
помогите, пожалуйста, решить проблему. В программировании не профи, пытаюсь создать сайт (питон + джанго). Дошел до подгрузки шаблона, а он его не видит. Бился об готовые ответы на подобную проблему, но ничего не помогает Наверное, накосячил с директориями, но в упор не могу понять, где. В первый раз задаю вопрос на стеке сам, если что-то не дописал - напишите пожалуйста, пришлю необходимую инфу. Помогите :( Почему так много папок - пробовал в templates создавать папку одноименную с mainapp, как советовали на стеке в других вопросах, но ничего, к сожалению, не помогает
(settings.py)
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'mainapp/templates/mainapp')],
'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)
from django.shortcuts import render
def test_view(request):
return render(request, 'index.hmtl', {})
(Структура проекта)
https://i.stack.imgur.com/Z4MtR.png
(Структура проекта поближе)
https://i.stack.imgur.com/UcHvm.png
(Ошибка)
https://i.stack.imgur.com/jmRF7.png
Traceback (most recent call last):
File "C:\Users\User\PycharmProjects\stud__project\venv\lib\site-packages\django\core\handlers\exception.py", line 47, in inner response = get_response(request)
File "C:\Users\User\PycharmProjects\stud__project\venv\lib\site-packages\django\core\handlers\base.py", line 181, in _get_response response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\User\PycharmProjects\stud__project\stud__project\mainapp\views.py", line 5, in test_view return render(request, 'index.hmtl', {})
File "C:\Users\User\PycharmProjects\stud__project\venv\lib\site-packages\django\shortcuts.py", line 19, in render content = loader.render_to_string(template_name, context, request, using=using)
File "C:\Users\User\PycharmProjects\stud__project\venv\lib\site-packages\django\template\loader.py", line 61, in render_to_string template = get_template(template_name, using=using)
File "C:\Users\User\PycharmProjects\stud__project\venv\lib\site-packages\django\template\loader.py", line 19, in get_template raise TemplateDoesNotExist(template_name, chain=chain)
Exception Type: TemplateDoesNotExist at / Exception Value: index.hmtl
Ответы (1 шт):
структура папок проекта:
stud_project
....
mainapp
templates
mainapp
index.html
stud_projects
...
settings.py
...
common_templates
если ты рендеришь
return render(request, 'index.hmtl', {})
тогда тебе нужно перенести файл index.html на папку выше и расположить в mainapp/templates, если же ты хочешь, что бы папка шаблоны располагалась именно внутри mainapp/templates/main/, тогда используй render(request, 'mainapp/index.hmtl', {})
так же небольщое замечание обычно в
'DIRS': [os.path.join(BASE_DIR, 'mainapp/templates/mainapp')],
ты указываешь путь в котором будут храниться шаблоны, которые общие для всего проекта, без привязки к какому-то конкретному приложению, например папка common_templates, которую я добавил к твоему проекту.
Для того, что бы папка mainapp/templates так же была в списке папок которую джанго ищет при использовании шаблона без того, что бы указать ee непосрественно в DIRS, необходимо в файл settings.py добавить твое приложение в раздел INSTALLED_APPS
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
...
'mainapp',
'app_1',
'app_2',
...
'app_n',
]
в итоге когда ты рендеришь шаблон return render(request, 'index.hmtl', {}) у тебя шаблон будет искаться в следующих папках
stud_project\mainapp\templates
stud_project\app_1\templates
stud_project\app_2\templates
...
stud_project\app_n\templates
а так же будет исопльзована папка, которая прописана в 'DIRS': [os.path.join(BASE_DIR, ...)],