我正在按照《构建 Django 2.0 Web 应用程序》一书学习 Django,到目前为止一切正常。该项目名为 config,并且有一个名为 core 的应用程序。应用程序(核心)有它自己的模板目录(config/core/templates)和它自己的 urls.py 文件(config/core/urls.py),它由根 urls.py 文件(config/config/urls.py)加载。皮)。当我运行服务器并访问其中一个核心 URL 时会发生什么,是这样的:
TemplateDoesNotExist at /movies
Template-loader postmortem
Django tried loading these templates, in this order:
Using engine django:
django.template.loaders.filesystem.Loader: /home/sugarcane/projects/config/templates/core/movie_list.html (Source does not exist)
django.template.loaders.app_directories.Loader: /home/sugarcane/projects/config/core/templates/core/movie_list.html (Source does not exist)
django.template.loaders.app_directories.Loader: /home/sugarcane/projects/config/venv/lib/python3.8/site-packages/django/contrib/admin/templates/core/movie_list.html (Source does not exist)
django.template.loaders.app_directories.Loader: /home/sugarcane/projects/config/venv/lib/python3.8/site-packages/django/contrib/auth/templates/core/movie_list.html (Source does not exist)
它正在寻找的模板文件实际上是:/home/sugarcane/projects/config/core/templates/movie_list.html
为什么它在错误的目录中查找?
以下是 urls.py 文件:
配置/核心/urls.py:
from django.urls import path
from . import views
app_name = 'core'
urlpatterns = [
path('movies', views.MovieList.as_view(), name='MovieList'),
]
和
配置/配置/urls.py
from django.contrib import admin
from django.urls import path, include
import core.urls
urlpatterns = [
path('admin/', admin.site.urls),
path('', include(core.urls, namespace='core')),
]
在settings.py 中,我得到了这个:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [
os.path.join(BASE_DIR, 'templates')
]
,
'APP_DIRS': True,
'OPTIONS': {
...
},
},
]
我读到'APP_DIRS': True告诉 django 在每个应用程序目录中查找模板目录。我的问题是它正在寻找不存在的模板/核心。为什么要搜索核心子目录?
一个显而易见的解决方案是将 movie_list.html 模板文件放入 config/core/templates/core,我只是想知道为什么书上告诉我直接将它放入 config/core/templates。也许这是因为这本书是为 Django 2.0 编写的,但我使用的是 Django 3.0?
天涯尽头无女友
相关分类