#django #django-2.1
Вопрос:
У меня возникли проблемы с маршрутизацией Django, чтобы найти шаблоны, расположенные на уровне приложения. То есть шаблоны в каталоге на уровне приложения не отображаются, если я не помещу их в корневой каталог на уровне проекта. Но проблема с этой архитектурой для меня заключается в том, что, если у меня есть два или более приложений с именем файла home.html
, как мне решить эту проблему из папки шаблонов на уровне проекта, чтобы они не конфликтовали.
Сообщение об ошибке
Template-loader postmortem
Django tried loading these templates, in this order:
Using engine django:
django.template.loaders.filesystem.Loader: C:UsersHPDesktopDEVPYTHONDEVELOPMENTWILLIAM-VINCENT-PROJECTdjango-begintemplatesindex.html (Source does not exist)
Я ожидал, что Джанго будет искать папки /templates/posts
и /templates/pages
, чтобы получить файлы. Это скорее попытка извлечь файлы непосредственно из templates
папки. Если бы я поместил HTML-файлы непосредственно в /templates/
папку, это привело бы к конфликтам, поскольку приложения имеют похожие имена файлов
Структура каталогов проекта
|__my-project
|__manage.py
|__pages
|__posts
|__templates
|__pages
| |__home.html
| |__about.html
|__posts
|__home.html
|__about.html
Я хочу, чтобы у каждого приложения было свое собственное home.html
и about.html
INSTALLED_APPS = [
'posts.apps.PostsConfig',
'pages.apps.PagesConfig',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(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',
],
},
},
]
Ответ №1:
Ваши шаблоны необходимо сохранить следующим образом:
ProjectName/AppName/Templates/AppName/Template.html
Поэтому, если бы ваш проект был вызван DjangoProject
и ваше приложение было вызвано DjangoApp
, это было бы: DjangoProject/DjangoApp/Templates/DjangoApp/Template.html
Это то же самое для любого приложения, которое вы запускаете в рамках своего проекта.
Редактировать:
В настоящее время у вас есть templates
папка в каталоге вашего проекта. Это неправильно.
Вам нужна templates
папка для каждого приложения в этом каталоге приложений.
Так my-project/pages/templates/pages
и my-project/posts/templates/posts
НЕ my-project/templates/
Комментарии:
1. Я сделал именно это для каталога уровня приложения, и это не сработало для меня
2. Пожалуйста, опубликуйте свой
settings.py
файл.3. @sharhan-alhassan Я обновил свой ответ. Вам необходимо удалить
templates
папку из каталога проекта и создатьtemplates
каталог в каждом каталоге приложений.