You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 21:45:09