为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

猛跑小猪 2023-02-07 10:59:31
我正在按照《构建 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 /moviesTemplate-loader postmortemDjango 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 pathfrom . import viewsapp_name = 'core'urlpatterns = [    path('movies', views.MovieList.as_view(), name='MovieList'),]和配置/配置/urls.pyfrom django.contrib import adminfrom django.urls import path, includeimport core.urlsurlpatterns = [    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?
查看完整描述

1 回答

?
天涯尽头无女友

TA贡献1831条经验 获得超9个赞

您需要冒号内的应用程序 url 文件

path('', include('core.urls')),

你的模式应该像这样

path('movies/', views.MovieList.as_view(), name='MovieList'),


查看完整回答
反对 回复 2023-02-07
  • 1 回答
  • 0 关注
  • 146 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信