Django 2.1: Структура шаблона

#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 каталог в каждом каталоге приложений.