Django: Шаблон шаблонов не найден при попытке доступа к шаблону рендеринга функций

У меня есть структура файла:

Resilience_Radar_R2/Leadership_Questions_App/Leadership_Questions/templates/questions.html

Я определил функцию riskindex, которая должна вывести файл questions.html и включить на страницу некоторый текст.

У меня также есть индексная функция, которая просто отправляет HttpResponse, если запрос пустой

Функция индекса работает нормально по адресу http://127.0.0.1:8000/Leadership_Questions_App/

но рискиндекс по адресу http://127.0.0.1:8000/Leadership_Questions_App/riskindex возвращает ошибку:

TemplateDoesNotExist at /Leadership_Questions_App/riskindex/
Leadership_Questions/questions.html
Request Method: GET
Request URL:    http://127.0.0.1:8000/Leadership_Questions_App/riskindex/
Django Version: 5.0.7
Exception Type: TemplateDoesNotExist
Exception Value:    
Leadership_Questions/questions.html
Exception Location: /Users/xxx/Documents/Work/Python Projects/Dashboard/Reslience_Radar_R1/.venv/lib/python3.12/site-packages/django/template/loader.py, line 19, in get_template
Raised during:  Leadership_Questions_App.views.riskindex
Python Executable:  /Users/xxx/Documents/Work/Python Projects/Dashboard/Reslience_Radar_R1/.venv/bin/python
Python Version: 3.12.3
Python Path:    
['/Users/xxx/Documents/Work/Python '
 'Projects/Dashboard/Reslience_Radar_R2',
 '/Library/Frameworks/Python.framework/Versions/3.12/lib/python312.zip',
 '/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12',
 '/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/lib-dynload',
 '/Users/xxx/Documents/Work/Python '
 'Projects/Dashboard/Reslience_Radar_R1/.venv/lib/python3.12/site-packages']
Server time:    Sat, 10 Aug 2024 19:44:06 +0000

Каталог терминала: (.venv) (base) xxx@MacBook-Pro Reslience_Radar_R2 %

Похоже, что он ищет в другом каталоге, а не в том, где находится код python.

Reslience_Radar_R2 urls.py

rom django.contrib import admin
from django.urls import include, path


urlpatterns = [
    path('admin/', admin.site.urls),
    path('Leadership_Questions_App/', include("Leadership_Questions_App.urls"))
]

Leadership_Questions_App

urls.py

from django.urls import path
from . import views

urlpatterns = [
    
    path("", views.index, name="index"),
    path("riskindex/", views.riskindex, name="riskindex"),
    
]

views.py

from django.shortcuts import render
from django.http import HttpResponse

# Create your views here.
def index(request):
    return HttpResponse("Leadership Questions")

def riskindex(request):
    description = "This is text"
    return render (request, "Leadership_Questions/questions.html", {
        "text": description
        }
        )

Leradership_Questions_App/templates questions.html

<!DOCTYPE html>
<html>
    <head>
        <title>Leadership Questions</title>
    </head>
    <body>

        {{ description }}

    </body>
</html>

templates in settings.py:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        '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',
            ],
        },
    },
]

Я попробовал изменить путь к функции riskindex и получил ту же ошибку:

def riskindex(request):
    description = "This is text"
    return render (request, "questions.html", {
        "text": description
        }
        )

Я пробовал удалить функцию index и path: и заставить функцию riskindex быть для пустого пути, но я получаю ту же ошибку "Template not found":

Internal Server Error: /Leadership_Questions_App/
Traceback (most recent call last):
  File "/Users/beyondscorecard/Documents/Work/Python Projects/Dashboard/Reslience_Radar_R1/.venv/lib/python3.12/site-packages/django/core/handlers/exception.py", line 55, in inner
    response = get_response(request)
               ^^^^^^^^^^^^^^^^^^^^^
  File "/Users/beyondscorecard/Documents/Work/Python Projects/Dashboard/Reslience_Radar_R1/.venv/lib/python3.12/site-packages/django/core/handlers/base.py", line 197, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/beyondscorecard/Documents/Work/Python Projects/Dashboard/Reslience_Radar_R2/Leadership_Questions_App/views.py", line 10, in riskindex
    return render (request, "Leadership_Questions/questions.html", {
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/beyondscorecard/Documents/Work/Python Projects/Dashboard/Reslience_Radar_R1/.venv/lib/python3.12/site-packages/django/shortcuts.py", line 25, in render
    content = loader.render_to_string(template_name, context, request, using=using)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/beyondscorecard/Documents/Work/Python Projects/Dashboard/Reslience_Radar_R1/.venv/lib/python3.12/site-packages/django/template/loader.py", line 61, in render_to_string
    template = get_template(template_name, using=using)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/beyondscorecard/Documents/Work/Python Projects/Dashboard/Reslience_Radar_R1/.venv/lib/python3.12/site-packages/django/template/loader.py", line 19, in get_template
    raise TemplateDoesNotExist(template_name, chain=chain)
django.template.exceptions.TemplateDoesNotExist: Leadership_Questions/questions.html
[10/Aug/2024 19:55:14] "GET /Leadership_Questions_App/ HTTP/1.1" 500 78688

У меня есть файловая структура:

Resilience_Radar_R2/Leadership_Questions_App/Leadership_Questions/templates/questions.html

В самом приложении есть каталог с именем template. Таким образом, должно быть:

Resilience_Radar_R2/Leadership_Questions_App/templates/Leadership_Questions/questions.html

Примечание: Модули Python обычно пишутся в snake_case, а не PascalCase, так что это должно быть leadership_questions, а не Leadership_Questions_App.

Кажется, вы забыли добавить новое приложение в список установленных_приложений.

Ваши установленные_приложения должны выглядеть следующим образом:

INSTALLED_APPS = [
    "django.contrib.admin",
    "django.contrib.auth",
    "django.contrib.contenttypes",
    "django.contrib.sessions",
    "django.contrib.messages",
    "django.contrib.staticfiles",
    "Leadership_Questions_App",
]
Вернуться на верх