【问题标题】:Template File not found找不到模板文件
【发布时间】:2022-01-08 05:09:02
【问题描述】:

所以我试图从...打开一个模板

但是模板文件没有如下所示...

from django.http import HttpResponse
from django.shortcuts import render


# Create your views here.
def index(request):
    return render(request, "home/index.html")

奇怪的是我的网页仍然可以使用,而当我删除该功能时它却无法使用。

这里有一些附加信息...

settings.py

# Application definition

INSTALLED_APPS = [
    'project_long_page',
    'about',
    'home',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

home/urls.py

from django.urls import path
from . import views

urlpatterns = [
    path("", views.index, name="index"),
]

第 2 部分问题:

已添加...

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [str(BASE_DIR.joinpath('templates'))]  # 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',
            ],
        },
    },
]

应用内的 HTML 页面(不要介意 .HTML 中的错误,我会解决的!)

base.html

第 3 部分: 有趣的是,即使它说... 未解析的模板引用'"main_header.html"' 该代码仍在工作并发布到网页上。我不知道是怎么回事,因为它以前不起作用。

第四部分:

在 base.html 中添加了这个

{% extends 'Headings/Headings1/base.html' %}

来自设置..

'DIRS': [str(BASE_DIR.joinpath('templates'))]  # BASE_DIR / 'templates'

仍然没有找到。但网页仍在运行。

【问题讨论】:

  • 在你的设置文件中分享TEMPLATES设置。

标签: python html css django


【解决方案1】:

您的模板文件夹应该在您的应用程序文件夹主目录中(在 about 下),否则 Django 将找不到它。查看https://django-project-skeleton.readthedocs.io/en/latest/structure.html 以了解正确的文件结构。我的猜测与您的模板文件夹中的其他文件夹相同。您可以在您的根目录中有一个模板文件夹,但我认为这不是您需要的。

要创建一个全局模板,您可以在您的“testWebsite”根目录中拥有一个模板文件夹,就像您已经拥有的一样。然后在您的 settings.py 中执行以下操作:

# settings.py

TEMPLATES = [
    {
        ...
        'DIRS': [str(BASE_DIR.joinpath('templates'))],
        ...
    },
]

我通常会在每个应用程序中创建一个 base.html,然后在应用程序内的每个 html 页面中添加一行 {% extends "home/base.html" %}。并在您的每个 base.html 文件中添加 {% extends "base.html" %}

类似这样的东西(我没有包含所有文件,只是一个示例):

testWebsite
├── about
│   └── templates
│       └── about
│           ├── base.html
│           └── about.html
├── home
│   └── templates
│       └── home
│           ├── base.html
│           ├── greet.html
│           └── index.html
├── project_long_page
│   └── templates
│       └── project_long_page
│           ├── base.html
│           └── project_long_page.html
├── templates
│   └── base.html
└── testWebsite
    └── settings.py

【讨论】:

  • 如果我想使用“全局”模板作为所有人都可以访问的网站标题怎么办?
  • 我刚刚更新了我的答案以解决您的问题。
  • 谢谢!我尝试了更改,运行了所有内容,然后将更新发布为第 2 部分!目前还是不行。
  • 问题是它没有找到模板main_header.html,因为 Django 在你的根项目的模板文件夹中寻找它,但是你在另一个文件夹中的另一个文件夹“标题1”中找到它'标题'。要么直接把文件放到根模板文件夹下(推荐),要么你试试{% extends 'Headings/Headings1/base.html' %}
  • P.S.在 stackoverflow 上,代码图像从来都不是一个好主意。甚至有一些方法可以放置没有图像的文件夹结构,但绝对没有代码图像:)
猜你喜欢
  • 2020-07-06
  • 2013-06-13
  • 2014-12-04
  • 1970-01-01
  • 2020-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-02
相关资源
最近更新 更多