首页 > 解决方案 > 如何解决 django TemplateDoesNotExist

问题描述

网站视图.py

from django.shortcuts import render
from django.utils import timezone
from .models import Post

def minjuand(request):
    posts = Post.objects.filter(published_date__lte = timezone.now()).order_by('published_date')
    return render(request,'blog/minjuand.html',{'posts':posts})

网址.py

from django.urls import path
from . import views

urlpatterns=[
    path('', views.minjuand, name="minjunad"),
]

在 settings.py

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

settings.py在末尾添加了我的应用程序INSTALLED_APPS并检查了拼写错误。为什么 Django 找不到我的模板?

我正在 Windows 10 上使用 Django 3.1.4 和 Python 3.9.0 进行开发。

博客项目结构

标签: pythondjango

解决方案


无需在 Django 设置中定义额外的模板目录。所有注册的应用程序(在您的INSTALLED_APPS列表中的应用程序settings.py)都使用默认模板目录my-app-directory/templates/

在您的应用程序目录中,创建一个名为templates(全部小写)的文件夹,将您的模板放在此文件夹中。因此,如果您有一个名为的应用程序blog,它将如下所示:

> blog/
  > migrations/
    > 0001_initial.py
  > templates/
    > my_template.html
  > admin.py
  > apps.py
  > models.py
  > views.py
> mysite/
  > settings.py
  > urls.py
  > wsgi.py
> manage.py

然后,您可以在如下视图中使用您的my_template.html模板:

def my_view(request):
    context = {}
    return render(request,'my_template.html', context)

注意,我们引用模板就像我们在templates/目录中一样


推荐阅读