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})