TemplateDoesNotExist в / users / profile / - PullRequest
       5

TemplateDoesNotExist в / users / profile /

0 голосов
/ 22 января 2020

Я пытаюсь создать страницу профиля, которая просто является страницей с данными пользователя, такими как имя, фамилия, адрес электронной почты и т. Д. c. Но я думаю, что что-то не так с моим представлением, моим url.py или моими настройками, что приводит к ошибке TemplateDoesNotExist в / users / profile / (users / profile. html). Хотя другие страницы работают нормально.

Вот мой след:

Файл "/Documents/morse_log/m_env/lib/python3.7/site-packages/django/ core / handlers / exception.py ", строка 34, во внутреннем ответе = get_response (запрос)

Файл" /Documents/morse_log/m_env/lib/python3.7/site -packages / django / core / handlers / base.py ", строка 115, в _get_response response = self.process_exception_by_middleware (e, запрос)

* Файл" / Documents / morse_log / m_env / lib / python3 .7 / site-packages / django / core / handlers / base.py ", строка 113, в _get_response response = wrapped_callback (запрос, * callback_args, ** callback_kwargs) *

Файл "/Documents/morse_log/users/views.py", строка 32, в профиле возвращает рендер (запрос, 'users / profile. html', args)

File "/ Documents / morse_log / m_env / lib / python3 .7 / site-packages / django / shortcuts.py ", строка 19, в файле render content = loader.render_to_string (имя шаблона, контекст, запрос, используя = использование)

Файл "/Documents/morse_log/m_env/lib/python3.7/site packages / django / template / loader.py", строка 61, в render_to_string template = get_template (template_name, using = using)

Файл "/Documents/morse_log/m_env/lib/python3.7/site-packages/django/template/loader.py", строка 19, в get_template поднять TemplateDoesNotExist ( template_name, chain = chain)

Тип исключения: TemplateDoesNotExist в / users / profile / Значение исключения: users / profile. html

settings.py:

INSTALLED_APPS = [
    # My apps
    'morse_logs',
    'users',

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

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

/ users / urls.py:

from django.urls import path, include
from django.contrib.auth.models import User

from . import views


app_name = 'users'

urlpatterns = [
    # Include default auth urls.
    path('', include('django.contrib.auth.urls')),

    # Registration
    path(r'/register/', views.register, name='register'),
    path(r'/profile/', views.profile, name='profile'),

]

/ users / profile. html:

{% block content %}
<title>Profile</title>
<div class="container">
    <p>
        {{user}}
        {{user.first_name}}
    </p>
</div>

{% endblock %}

users / views.py:

from django.shortcuts import render, redirect
from django.contrib.auth import login
from django.contrib.auth.forms import UserCreationForm
from users.forms import RegistrationForm
from django.contrib.auth import views as auth_views
from django.contrib.auth.models import User


# Create your views here.
def register(request):
    """Register a new user"""
    if request.method != 'POST':
        # Display blank registration form
        form = RegistrationForm()
    else:
        # Process completed form
        form = RegistrationForm(data=request.POST)

        if form.is_valid():
            new_user = form.save()
            # Log the user in and then redirect to home page
            login(request, new_user)
            return redirect('morse_logs:index')

    # Display a blank or invalid form.
    context = {'form': form}
    return render(request, 'registration/register.html', context)


def profile(request):
    args = {'user': request.user}
    return render(request, 'users/profile.html', args)

users / model.py: (в моем текстовом редакторе написано, что значение «отправитель» не используется, «Неразрешенные атрибуты» ссылаются на «объекты» для класса UserProfile)

from django.db import models
from django import forms
from django.contrib.auth.models import User
from django.db.models.signals import post_save

# Create your models here.


class UserProfile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)
    description = models.CharField(max_length=100, default='')


def create_profile(sender, **kwargs):
    if kwargs['created']:
        user_profile = UserProfile.objects.create(user=kwargs['instance'])

    post_save.connect(create_profile, sender=User)

forms.py:

from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm


class RegistrationForm(UserCreationForm):
    email = forms.EmailField(required=True)

    class Meta:
        model = User
        fields = (
            'username',
            'first_name',
            'last_name',
            'email',
            'password1',
            'password2'
        )

    def save(self, commit=True):
        user = super(RegistrationForm, self).save(commit=False)
        user.first_name = self.cleaned_data['first_name']
        user.last_name = self.cleaned_data['last_name']
        user.email = self.cleaned_data['email']

        if commit:
            user.save()

        return user

1 Ответ

1 голос
/ 22 января 2020

Необходимо добавить каталог шаблонов в список шаблонов:

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

Поэтому замените следующий список ШАБЛОНЫ.

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

И создайте шаблон в следующем формате:

      users  
        ----|templates
               ----|users
                  -----|profile.html 
...