Django не находит шаблон в каталоге templates / app - PullRequest
0 голосов
/ 13 марта 2020

В одном из моих проектов поиск шаблона осуществляется на

<project_root>/<app>/templates/

, а в другом - на

<project_root>/<app>/templates/<app>/

Что именно зависит от

Оба файла settings.py проекта имеют следующую одинаковую конфигурацию в settings.py

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

Вот ошибка

> TemplateDoesNotExist at /printer_add printer_add.html Request
> Method:   GET Request URL:    http://127.0.0.1:8000/printer_add Django
> Version:  3.0.3 Exception Type:   TemplateDoesNotExist Exception Value:   
> printer_add.html Exception
> Location: /usr/local/lib/python3.6/site-packages/django/template/loader.py
> in select_template, line 47 Python Executable:    /usr/bin/python3 Python
> Version:  3.6.8 Python Path:   ['/opt/app/w_apps', 
> '/usr/lib64/python36.zip',  '/usr/lib64/python3.6', 
> '/usr/lib64/python3.6/lib-dynload', 
> '/usr/local/lib64/python3.6/site-packages', 
> '/usr/local/lib/python3.6/site-packages', 
> '/usr/lib64/python3.6/site-packages', 
> '/usr/lib/python3.6/site-packages',  '/opt/app/w_apps'] Server
> time: Fri, 13 Mar 2020 10:38:48 +0000 Template-loader postmortem
> Django tried loading these templates, in this order:
> 
> Using engine django:
> 
> django.template.loaders.app_directories.Loader:
> /usr/local/lib/python3.6/site-packages/django/contrib/admin/templates/printer_add.html
> (Source does not exist)
> django.template.loaders.app_directories.Loader:
> /usr/local/lib/python3.6/site-packages/django/contrib/auth/templates/printer_add.html
> (Source does not exist)
> django.template.loaders.app_directories.Loader:
> /opt/app/w_apps/sts/templates/printer_add.html (Source does not exist)

Вид обработки

class PrinterCreate(CreateView):
    model = Printer
    form_class = PrinterCreateForm
    template_name = 'printer_add.html'
    success_url = reverse_lazy('printer_list')

1 Ответ

0 голосов
/ 13 марта 2020

Вы хотите использовать шаблон в /opt/app/w_apps/sts/templates/sts/printer_add.html

Трассировка показывает, что он ищет в каталоге /opt/app/w_apps/sts/templates. Это потому, что у вас есть 'APP_DIRS': True в настройке TEMPLATES.

Если вы разделите расположение шаблона на две части, вы получите:

/opt/app/w_apps/sts/templates/sts/printer_add.html = /opt/app/w_apps/sts/templates/ + sts/printer_add.html

Поэтому вам следует использовать sts/printer_add.html в качестве Название шаблона на ваш взгляд.

class PrinterCreate(CreateView):
    ...
    template_name = 'sts/printer_add.html'
...