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

Django初学者遇TemplateDoesNotExist错误:为何查找posts/post_list.html?

问题分析与解决思路

核心原因:通用视图的默认模板规则

你大概率是用了ListView这类Django通用视图——这类视图自带默认逻辑:如果没明确指定template_name,会自动按[app名]/[模型名]_list.html的路径查找模板。哪怕你以为自己指定了template_name,也可能是代码有疏漏(比如拼写错误、缩进不对导致配置不生效),或是视图类继承关系没处理对,触发了默认规则。

排查步骤

  • 检查视图代码:确认视图类里template_name = 'home.html'的拼写、缩进是否正确(要和model属性同级),有没有写错大小写或漏写后缀。
  • 核对模板文件位置:
    • 如果模板放在项目根目录的templates文件夹下,要确保settings.py的TEMPLATES配置中,DIRS包含了BASE_DIR / 'templates'这个路径。
    • 如果模板放在posts app的templates文件夹下,路径要对应上——比如指定home.html的话,文件应该在posts/templates/home.html,而不是嵌套在posts/templates/posts/下。
  • 检查INSTALLED_APPS:确认posts app已经添加到settings.py的INSTALLED_APPS列表里,否则Django不会扫描这个app的templates目录。

常见错误示例

比如下面的代码会触发默认查找逻辑:

from django.views.generic import ListView
from .models import Post

class HomeView(ListView):
    model = Post
    # 错误:template_name缩进错了,放在了方法内部,不生效
    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        template_name = 'home.html'
        return context

正确写法应该是:

class HomeView(ListView):
    model = Post
    template_name = 'home.html'  # 和model属性同级,正确生效

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        # 其他业务逻辑
        return context

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 20:57:32