I am trying to make a profile page, which simply is a page with user details, such as firstname, lastname, email, etc. But I think there is something wrong with my view or my url.py or my setting, which gives me an error of TemplateDoesNotExist at /users/profile/ (users/profile.html). Other pages are working fine though.
Here is my traceback:
File "/Documents/morse_log/m_env/lib/python3.7/site-packages/django/core/handlers/exception.py", line 34, in inner response = get_response(request)
File "/Documents/morse_log/m_env/lib/python3.7/site-packages/django/core/handlers/base.py", line 115, in _get_response response = self.process_exception_by_middleware(e, request)
*File "/Documents/morse_log/m_env/lib/python3.7/site-packages/django/core/handlers/base.py", line 113, in _get_response response = wrapped_callback(request, *callback_args, **callback_kwargs)*
File "/Documents/morse_log/users/views.py", line 32, in profile return render(request, 'users/profile.html', args)
File "/Documents/morse_log/m_env/lib/python3.7/site-packages/django/shortcuts.py", line 19, in render content = loader.render_to_string(template_name, context, request, using=using)
File "/Documents/morse_log/m_env/lib/python3.7/site packages/django/template/loader.py", line 61, in render_to_string template = get_template(template_name, using=using)
File "/Documents/morse_log/m_env/lib/python3.7/site-packages/django/template/loader.py", line 19, in get_template raise TemplateDoesNotExist(template_name, chain=chain)
Exception Type: TemplateDoesNotExist at /users/profile/ Exception Value: 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: (in my text editor, it says 'sender' value is not used, Unresolved attributes reference 'objects' for class 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