Django模板不存在问题求助:访问nosotros/libros路径报错
我正在学习Python Django,已在templates/paginas目录下创建nosotros.html文件,同时在views.py中编写了如下代码:
from django.shortcuts import render from django.http import HttpResponse # Create your views here. def inicio(request): return HttpResponse("<h1> Bienvenido </h1>") def nosotros(request): return render(request, "paginas/nosotros.html") def libros(request): return render(request, "libros/index.html")
在urls.py中配置了对应URL路由:
from django.urls import path from . import views urlpatterns = [ path('', views.inicio, name="inicio"), path('nosotros', views.nosotros, name="nosotros"), path('libros', views.libros, name="libros"), ]
但访问http://127.0.0.1:8000/nosotros或http://127.0.0.1:8000/libros时,出现TemplateDoesNotExist at /libros或TemplateDoesNotExist at /nosotros错误。我的setting.py(位于CRUDMySQL目录,未修改过)中TEMPLATES配置如下:
TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [], 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], }, }, ]
请问问题出在哪里?我哪里操作错了?
问题核心是Django无法定位到你的模板文件,结合你的配置,具体原因和解决方式如下:
1. 模板目录位置不符合Django查找规则
当APP_DIRS=True时,Django只会去已注册的Django应用的templates子目录下查找模板。如果你的templates目录放在项目根目录(CRUDMySQL目录下),而非某个应用的目录内,Django自然找不到。
解决方式A:将模板目录移至已注册应用下
假设你的应用名为myapp,调整目录结构如下:
CRUDMySQL/ CRUDMySQL/ settings.py myapp/ views.py urls.py templates/ # 将模板目录移至应用目录内 paginas/ nosotros.html libros/ index.html
同时确保该应用已在settings.py的INSTALLED_APPS中注册(见下文第2点)。
解决方式B:修改settings.py识别项目根目录的模板
如果想保留templates在项目根目录,修改TEMPLATES中的DIRS配置,添加项目根目录的模板路径:
import os TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_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.contrib.messages.context_processors.messages', ], }, }, ]
BASE_DIR是Django项目的根目录路径,os.path.join(BASE_DIR, 'templates')会自动拼接出正确的模板目录路径。
2. 应用未在INSTALLED_APPS中注册
如果模板目录已放在应用下,但该应用未添加到settings.py的INSTALLED_APPS列表,APP_DIRS=True也不会生效。打开CRUDMySQL/settings.py,找到INSTALLED_APPS并添加你的应用名称:
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'myapp', # 替换为你的应用实际名称 ]
3. 检查模板路径拼写
确认views.py中渲染模板的路径与实际文件路径完全一致,避免出现大小写错误、目录名拼写错误(比如把paginas写成pagina)。
内容的提问来源于stack exchange,提问作者alex

