Cookiecutter Django - ListView ожидает шаблоны в другом каталоге, чем Views?

Cookiecutter автоматически генерирует приложение users в каталоге my_project. Я поместил my_app в тот же каталог / перечислил его под INSTALLED_APPS и он работает нормально. Затем я создал свою папку шаблонов под my_project/templates/my_app/ (такую же, как сгенерированные users шаблоны).

При использовании View я получал TemplateDoesNotExistError. Вместо этого я поместил шаблоны под my_project/my_app/templates, и тогда все заработало. Когда я использовал ListView, я получал ту же ошибку. Поэтому я переместил этот шаблон в предыдущую папку, и он работает.

- requirements
- my_project
    - contrib
    ▒   - sites
    ▒       - migrations
    - static
    ▒   - css
    ▒   - fonts
    ▒   - images
    ▒   ▒   - favicons
    ▒   - js
    - templates
    ▒   - account
    ▒   - pages
    ▒   - my_app
    ▒           - item_list.html <- only works here (ListView)
    ▒   - users
    - my_app
    ▒   - migrations
    ▒   - templates
    ▒           - item_detail.html <- only works here (View)
    - users
    ▒   - migrations
    ▒   - tests
    - utils

Что я упускаю? Я хотел бы держать мои шаблоны вместе в одной папке, очевидно. Если я поменяю шаблоны/каталоги местами, то получу TemplateDoesNotExistError.

Вот мои релевантные (я думаю?) настройки.

settings/base.py

ROOT_DIR = Path(__file__).resolve(strict=True).parent.parent.parent
APPS_DIR = ROOT_DIR / "my_project"

INSTALLED_APPS = [
    ...
    "my_project.users",
    "my_project.my_app",
    ...
]

TEMPLATES = [
    {
        "BACKEND": "django.template.backends.django.DjangoTemplates",
        "DIRS": [str(APPS_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.template.context_processors.i18n",
                "django.template.context_processors.media",
                "django.template.context_processors.static",
                "django.template.context_processors.tz",
                "django.contrib.messages.context_processors.messages",
                "my_project.users.context_processors.allauth_settings",
            ],
        },
    }
]

my_project/my_app/apps.py

from django.apps import AppConfig
from django.utils.translation import gettext_lazy as _


class MyAppConfig(AppConfig):
    # default_auto_field = "django.db.models.BigAutoField"
    name = "my_project.my_app"
    verbose_name = _("My_App") # not really this but you get it

    def ready(self):
        try:
            import my_project.my_app.signals  # noqa F401
        except ImportError:
            pass

Согласно этому ответу, возможно, я неправильно настроил INSTALLED_APP?

  1. добавьте <project_slug>.<name-of-the-app>.apps.<NameOfTheAppConfigClass>, на ваш LOCAL_APPS в config/settings/base.py
  2. .

EDIT: my_project.my_app.apps.MyAppConfig добавлен в LOCAL_APPS и не имеет значения...

12 часов спустя я переделал весь процесс cookiecutter django следуя хорошо написанному руководству , затем скопировал мои модели, представления, url, шаблоны - и проблема все еще была там...

К счастью, в руководстве показано много примеров представления (в отличие от документации!), и я заметил свое представление:

class ItemView(LoginRequiredMixin, View):
    """ Item Detail """

    template_name = "item.html"

должно было быть:

class ItemView(LoginRequiredMixin, View):
    """ Item Detail """

    template_name = "my_app/item.html"

Теперь все живет счастливо в одной папке с шаблонами.

Вернуться на верх