шаблон не существует в django - PullRequest
0 голосов
/ 08 февраля 2020

Я использую django 2.2, и я получаю

TemplateDoesNotExist в / register /

Это трассировка, которую я получил:

Environment:`


Request Method: GET
Request URL: http://127.0.0.1:2000/register/

Django Version: 2.2.4
Python Version: 3.7.3
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'post.apps.PostConfig']
Installed 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']

Template loader postmortem
Django tried loading these templates, in this order:

Using engine django:
    * django.template.loaders.filesystem.Loader: /home/wss/Desktop/projects/python/django/manascode/part1/django-blog-basic-master/blog/templates/signup.html (Source does not exist)
    * django.template.loaders.app_directories.Loader: /home/wss/Desktop/projects/python/django/manascode/part1/django-blog-basic-master/.venv/lib/python3.7/site-packages/django/contrib/admin/templates/signup.html (Source does not exist)
    * django.template.loaders.app_directories.Loader: /home/wss/Desktop/projects/python/django/manascode/part1/django-blog-basic-master/.venv/lib/python3.7/site-packages/django/contrib/auth/templates/signup.html (Source does not exist)
    * django.template.loaders.app_directories.Loader: /home/wss/Desktop/projects/python/django/manascode/part1/django-blog-basic-master/blog/post/templates/signup.html (Source does not exist)



Traceback:

File "/home/wss/Desktop/projects/python/django/manascode/part1/django-blog-basic-master/.venv/lib/python3.7/site-packages/django/core/handlers/exception.py" in inner
  34.             response = get_response(request)

File "/home/wss/Desktop/projects/python/django/manascode/part1/django-blog-basic-master/.venv/lib/python3.7/site-packages/django/core/handlers/base.py" in _get_response
  115.                 response = self.process_exception_by_middleware(e, request)

File "/home/wss/Desktop/projects/python/django/manascode/part1/django-blog-basic-master/.venv/lib/python3.7/site-packages/django/core/handlers/base.py" in _get_response
  113.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "/home/wss/Desktop/projects/python/django/manascode/part1/django-blog-basic-master/blog/blog/views.py" in register
  21.     return render(request, 'signup.html', {'form': form})

File "/home/wss/Desktop/projects/python/django/manascode/part1/django-blog-basic-master/.venv/lib/python3.7/site-packages/django/shortcuts.py" in render
  36.     content = loader.render_to_string(template_name, context, request, using=using)

File "/home/wss/Desktop/projects/python/django/manascode/part1/django-blog-basic-master/.venv/lib/python3.7/site-packages/django/template/loader.py" in render_to_string
  61.         template = get_template(template_name, using=using)

File "/home/wss/Desktop/projects/python/django/manascode/part1/django-blog-basic-master/.venv/lib/python3.7/site-packages/django/template/loader.py" in get_template
  19.     raise TemplateDoesNotExist(template_name, chain=chain)

Exception Type: TemplateDoesNotExist at /register/
Exception Value: signup.html

И это структура проекта:

blog
├── __init__.py
├── __pycache__
│   ├── __init__.cpython-37.pyc
│   ├── settings.cpython-37.pyc
│   ├── urls.cpython-37.pyc
│   ├── views.cpython-37.pyc
│   └── wsgi.cpython-37.pyc
├── settings.py
├── templates
│   └── signup.html
├── urls.py
├── views.py
└── wsgi.py

(есть приложение под названием post, которое, я думаю, не нуждается в его структуре. Но если оно понадобится, я поделиться им.)

Как видите, шаблон находится в нужном месте, которое ищет движок django, но в нем говорится "источник не существует".

views.py file:

from django.contrib.auth import login, authenticate
from django.contrib.auth.forms import UserCreationForm
from django.shortcuts import render, redirect


    def register(request):
        if request.method == 'POST':
            form = UserCreationForm(request.POST)

            if form.is_valid():
                form.save()

                username = form.cleaned_data.get('username')
                raw_password = form.cleaned_data.get('password')
                user = authenticate(username=username, password=raw_password)

                login(request, user)
                return redirect('/')
        else:
            form = UserCreationForm()
        return render(request, 'signup.html', {'form': form})

файл settings.py:

import os

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))


DEBUG = True

ALLOWED_HOSTS = []


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

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 = 'blog.urls'

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

WSGI_APPLICATION = 'blog.wsgi.application'


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

AUTH_PASSWORD_VALIDATORS = [
    {
        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
    },
]


LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'UTC'

USE_I18N = True

USE_L10N = True

USE_TZ = True


STATIC_URL = '/static/'

PS 1) Это код, который я клонировал из github ( репозиторий ), и он из this учебник сайта. 2) Я тоже пробовал это с django 3, но возникла та же проблема.

1 Ответ

0 голосов
/ 08 февраля 2020

Я скачал проект. Если блог - это имя проекта, то у него должно быть основное имя приложения блог. Я думаю, что вы показываете эту структуру проекта.

Вы можете создать папку шаблонов в проекте блога, а не в главном приложении блога.

Что нужно сделать?

Либо:

Just cut paste your template folder outside the blog app and inside blog project folder.

Или:

return render(request, 'blog/signup.html', {'form': form}) and create a blog named folder in templates and place signup.html inside that.

Поправьте меня, если я ошибаюсь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...