【问题标题】:django2 + python3: TemplateDoesNotExistdjango 2 + python 3: TemplateDoesNotExist
【发布时间】:2023-03-26 22:32:01
【问题描述】:

我知道这个网站上有很多关于这个问题的问题,但我找不到解决方案。

我在 Windows 10 上使用 Python 3.6 (anaconda) + django 2.0.2。

我正在关注教程:https://docs.djangoproject.com/en/2.0/intro/tutorial03/

这是我的views.py

from django.shortcuts import render

# Create your views here.
from django.http import HttpResponse

from .models import *


def index(request):
    content = 'abcxyz'

    context = {'content': content}
    return render(request, 'polls/index.html', context)

我在文件夹polls\templates\polls中创建了一个文件index.html

我的settings.py

INSTALLED_APPS = [
    'polls.apps.PollsConfig',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

ROOT_URLCONF = 'django_site.urls'

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

WSGI_APPLICATION = 'django_site.wsgi.application'


# Database
# https://docs.djangoproject.com/en/2.0/ref/settings/#databases

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

我遇到了“TemplateDoesNotExist”的问题 - 在我看来 django 试图在

中寻找模板
django.template.loaders.app_directories.Loader: /mnt/e/workspace/capec-processing/code/django_site/polls/templates/polls/templates/polls/index.html (Source does not exist)
django.template.loaders.app_directories.Loader: /home/user_name/anaconda3/envs/capec/lib/python3.6/site-packages/django/contrib/admin/templates/polls/templates/polls/index.html (Source does not exist)
django.template.loaders.app_directories.Loader: /home/user_name/anaconda3/envs/capec/lib/python3.6/site-packages/django/contrib/auth/templates/polls/templates/polls/index.html (Source does not exist)

我不确定自己做错了什么,因为我按照 django 网站上的教程进行操作。

你能给我一个提示吗?

更新

这是我的根目录的结构(称为django_site):

django_site
--django_site
----settings.py
--polls
----templates
------polls
--------index.html
----views.py
--db.sqlite3
--manage.py

【问题讨论】:

  • 能否请您发布您的项目的目录结构?您可能有两个不同的模板目录,而 django 正在寻找错误的目录。

标签: python django python-3.x django-templates


【解决方案1】:

TEMPLATES 下的DIRS 的值更改为此,以告诉django 在您的应用目录中查找模板。

'DIRS': [os.path.join(BASE_DIR, 'templates'),],

然后您可以将模板与 ma​​nage.py 平行放置或放在特定的应用目录下。

+app
-+__init__.py
-+templates
---+polls
-----+index.html

【讨论】:

  • 不,这不是必需的,也不会帮助 OP。 'APP_DIRS': True 所以他只需要将他的模板放在正确的目录中即可。
  • 如果你已经完成了答案会更好。我已将其指定为包含与 manage.py 直接平行的模板目录
  • 我确实通过了答案,但 OP 专门按照教程进行操作,所以这不是他们想要的。他没有问他怎么能纠正它,而是他做错了什么。但是,是的,毕竟这可能是一个有用的答案。
  • 通过将内容添加到'DIRS' 变量,现在它可以工作了。但是,是的,我不知道为什么 django 在没有明确说明的情况下无法识别模板文件。
【解决方案2】:

在设置中更改已安装应用的顺序

INSTALLED_APPS = [

    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'polls.apps.PollsConfig',
]

【讨论】:

    【解决方案3】:

    在你的setting.py中你需要添加这个

    INSTALLED_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'polls'   # You need to add this too. This should be same as your app name.
    ]
    
    TEMPLATES = [
        {
            'BACKEND': 'django.template.backends.django.DjangoTemplates',
            'DIRS': [os.path.join(BASE_DIR, "templates")],  # Add this to your settings file
            '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',
                ],
            },
        },
    ]
    

    你的模板文件夹应该在这里

    myproject/
     |-- myproject/
     |    |-- polls/
     |    |-- myproject/
     |    |-- templates/     <-- here!
     |    |    |-- polls/
     |    |    |    |-- index.html
     |    |    |-- base.html
     |    |    +-- home.html
     |    +-- manage.py
     +-- venv/
    

    【讨论】:

    • 您可以跳过INSTALLED_APPS 部分,因为它没有任何问题。另外,添加 appConfig 类是添加本地应用的推荐方式。
    • 我仍在使用 django 1.11.8。这就是为什么我不知道。下次我会做我的研究。
    • 那个推荐is there since Django 1.9 :)
    【解决方案4】:

    您需要做的就是将您的应用程序名称(即 polls)添加到 settings.py 文件中的已安装应用程序列表中,并将 URL 重新加载到应用程序索引页面。我不知道为什么 Django 教程仍然不包括这一步,因为它每次都会绊倒每个人。

    settings.py

    # Application definition
    
    INSTALLED_APPS = [
       'django.contrib.admin',
       'django.contrib.auth',
       'django.contrib.contenttypes',
       'django.contrib.sessions',
       'django.contrib.messages',
       'django.contrib.staticfiles',
       'polls',
    ]
    

    【讨论】:

      猜你喜欢
      • 2011-06-13
      • 2014-10-17
      • 1970-01-01
      • 2017-11-03
      • 2018-09-29
      • 1970-01-01
      • 2018-06-02
      • 2014-02-19
      • 2016-11-16
      相关资源
      最近更新 更多