Django - 如何正确加载应用程序模板文件

我正在按照《构建 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?


猛跑小猪
浏览 147回答 1
1回答

天涯尽头无女友

您需要冒号内的应用程序 url 文件path('', include('core.urls')),你的模式应该像这样path('movies/', views.MovieList.as_view(), name='MovieList'),
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python