Django не проверяет пути в DIRS для файлов

У меня есть папка вне моего файла шаблонов, которую я хочу отобразить Я пробовал следующее:

    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'projects')],
        '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',
            ],
        },
    },
]

Не работает Я хочу визуализировать его следующим образом: return render(request, f"{username}/{name}/index.html")

Пожалуйста, помогите! Счастливого кодинга!

Я думаю, что у вас есть некоторое непонимание того, как работают шаблоны. Шаблон - это файл, который Django может использовать для рендеринга содержимого в HTTP ответе. Но это не имеет ничего общего с URL, который в конечном счете будет отображать представление.

Представление может отображать ноль, один или более шаблонов, и в конечном итоге должно просто возвращать HTTP-ответ, есть ли шаблон, который помогает в этой задаче, не имеет значения.

Таким образом, вы можете определить шаблон url, который выглядит следующим образом:

urlpatterns = [
    # …,
    path('<str:username>/<str:name>/index.html', some_view, name='some-name'),
    # …,
]

и затем использовать представление для рендеринга некоторого шаблона:

from django.http import HttpResponse

def some_view(request, username, name):
    # …
    return HttpResponse(f'Hello {username}')

Таким образом, это простое представление не использует никакого шаблона, и просто отвечает 'Hello username'. Если вы выводите шаблоны, то они не обязательно должны использовать то же имя файла, что и URL, вы можете использовать render(…) [Django-doc] для вывода шаблона и таким образом облегчить создание более сложного HTML, но шаблон совсем не обязателен.

Если вы таким образом определяете шаблон, то обычно вы делаете это в каталоге app_name/templates/app_name/, а представление обычно использует один и тот же шаблон(ы) для всех вызовов одного и того же представления (хотя это тоже не обязательно). Например, если ваше приложение называется users, вы можете сделать шаблон в users/templates/users/index.html, а затем отобразить представление с помощью:

from django.shortcuts import render

def some_view(request, username, name):
    # …
    return render(request, 'users/index.html', {'username': username, 'name': name})
Вернуться на верх