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
?
- добавьте
.<project_slug>.<name-of-the-app>.apps.<NameOfTheAppConfigClass>
, на ваш LOCAL_APPS в config/settings/base.py
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"
Теперь все живет счастливо в одной папке с шаблонами.