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

如何解决Django中accounts/login.html的TemplateDoesNotExist错误?

Django部署Heroku后TemplateDoesNotExist问题解决

问题描述

使用Django开发博客应用并部署到Heroku后,访问/accounts/login/时出现TemplateDoesNotExist错误,无法加载login.html页面。尝试配置'DIRS': [os.path.join(BASE_DIR, 'Templates')]未解决问题,文件结构及settings.py相关配置如下:

文件结构

BLOG
├─.idea
├─accounts
|    ├─__pycache__
|    ├─migrations
|    ├─Templates
|    |  └─accounts
|    |     ├─login.html
|    |     └─signup.html
|    ├─__init__.py
|    ├─admin.py
|    ├─apps.py
|    ├─models.py
|    ├─tests.py
|    ├─urls.py
|    └─views.py
├─articles
|    ├─__pycache__
|    ├─migrations
|    ├─Templates
|    |  └─articles
|    |     ├─article_create.html
|    |     ├─article_details.html
|    |     ├─article_form.html
|    |     ├─article_list.html
|    |     └─pagination.html
|    ├─__init__.py
|    ├─admin.py
|    ├─apps.py
|    ├─forms.py
|    ├─models.py
|    ├─tests.py
|    ├─urls.py
|    └─views.py
├─blog
|    ├─__pycache__
|    ├─Templates
|    |  └─default.html
|    ├─__init__.py
|    ├─asgi.py
|    ├─settings.py
|    ├─urls.py
|    ├─views.py
|    └─wsgi.py
├─media
├─static
|  ├─favicon.ico
|  ├─logo.png
|  ├─slugify.js
|  ├─styles.css
|  └─background.jpg
├─db.sqlite3
└─manage.py

当前settings.py中TEMPLATES配置

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': ['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',
            ],
        },
    },
]

解决方案

1. 确认应用已在INSTALLED_APPS中注册

Django只会在已注册的应用目录下查找模板,打开settings.py,确保accounts、articles和blog都在INSTALLED_APPS列表中:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # 注册你的应用
    'accounts.apps.AccountsConfig',
    'articles.apps.ArticlesConfig',
    'blog.apps.BlogConfig',
]

注:每个应用的Config类可在对应app的apps.py文件中找到,比如accounts/apps.py中的AccountsConfig。

2. 修正模板渲染路径

在accounts/views.py中渲染登录页面时,必须使用完整的相对路径'accounts/login.html',而非直接'login.html':

from django.shortcuts import render

def login_view(request):
    # 正确的模板路径
    return render(request, 'accounts/login.html')

3. 调整TEMPLATES中的DIRS配置

项目根目录并无名为Templates的文件夹,当前DIRS配置无效。由于采用应用内模板结构,只需保留APP_DIRS: True,将DIRS改为空列表即可:

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',
            ],
        },
    },
]

4. 检查Git是否追踪模板文件

确保.gitignore文件未忽略Templates文件夹,否则部署到Heroku时模板文件不会被上传。打开.gitignore,删除任何包含Templates的规则,之后执行以下命令提交模板文件:

git add accounts/Templates articles/Templates blog/Templates
git commit -m "Add template files"
git push heroku main

5. 排查大小写问题

Heroku运行在Linux环境下,文件名区分大小写。确认模板文件名是login.html(全小写),而非Login.html或其他大小写混合的名称。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 07:55:01