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

Django视图类渲染模板报错:TemplateDoesNotExist问题咨询

解决Django模板找不到的问题:你遗漏的几个关键概念

嘿,我来帮你捋清楚这个TemplateDoesNotExist的问题,你主要遗漏了Django里几个关于模板查找和类视图的核心知识点:

1. Django的模板路径查找规则

Django默认会在每个已注册应用的templates目录下搜索模板,而且绝对不要用带开头斜杠的路径(比如你写的/login/index.html)。开头的斜杠会让Django跳过应用内的templates,直接去项目根目录的templates文件夹找(如果没配置的话就找不到了)。

你的模板实际在login/templates/login/index.html,所以正确的template_name应该写成login/index.html——去掉开头的斜杠,Django就会自动去login应用的templates目录下找login/index.html了。

2. 类视图中get方法的返回值要求

你重写了Index类的get方法,但犯了一个小错误:调用了render却没有返回它!Django的视图必须返回一个HttpResponse对象(render函数本质就是生成并返回这个对象)。正确的写法应该是:

def get(self, request):
    return render(request, self.template_name)

其实更省心的是,TemplateView本身已经帮你实现了get方法的逻辑,你完全可以不用重写它——只要正确设置template_name就行,这也是Django通用视图的便利之处。

3. 应用注册的必要性(容易忽略的点)

虽然你没提,但一定要确认login应用已经加到项目settings.py的INSTALLED_APPS列表里了:

INSTALLED_APPS = [
    # 其他默认应用...
    'login',
]

Django只会在INSTALLED_APPS里的应用中查找模板资源,没注册的话,就算模板文件存在也找不到。

快速修正步骤

  • 把template_name改成login/index.html(去掉开头的斜杠)
  • 要么删除重写的get方法,要么在get里返回render的结果
  • 确认login已经在INSTALLED_APPS中完成注册

这样调整后,你的页面应该就能正常加载啦。

内容的提问来源于stack exchange,提问作者Elcid_91

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:57:09