Page not found (404)
Request Method: GET
Request URL:
http://127.0.0.1:8000/Using the URLconf defined in question_post.urls, Django tried these URL patterns, in this order:
1.admin/
2.signup/ [name='signup']
3.login/ [name='login']
4.logout/ [name='logout']
5.post_question/ [name='post_question']
6.question_list/ [name='question_list']
7.question/<int:question_id>/ [name='question_detail']
8.question/<int:question_id>/post_answer/ [name='post_answer']
9.answer/<int:answer_id>/like/ [name='like_answer']
10.question_detail/<int:question_id>/ [name='question_detail']
The empty path didn’t match any of these.
Below are my django project files.
models.py
---------
from django.db import models
from django.contrib.auth.models import User
class UserProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
# Remove the username field from here, as it belongs to the User model.
first_name = models.CharField(max_length=100, blank=True, null=True)
last_name = models.CharField(max_length=100, blank=True, null=True)
email = models.EmailField(blank=True, null=True)
profile_picture = models.ImageField(
upload_to='profile_pics/', blank=True, null=True)
def __str__(self):
return self.user.username
class Question(models.Model):
user = models.ForeignKey(UserProfile, on_delete=models.CASCADE)
text = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
class Answer(models.Model):
user = models.ForeignKey(UserProfile, on_delete=models.CASCADE)
question = models.ForeignKey(Question, on_delete=models.CASCADE)
text = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
class Like(models.Model):
user = models.ForeignKey(UserProfile, on_delete=models.CASCADE)
answer = models.ForeignKey(Answer, on_delete=models.CASCADE)
views.py
--------
from django.shortcuts import render, redirect
from django.contrib.auth.mixins import LoginRequiredMixin
from django.views import View
from django.urls import reverse_lazy
from django.contrib.auth.forms import UserCreationForm, AuthenticationForm
from .models import Question, Answer, Like, UserProfile
from .forms import QuestionForm, AnswerForm, LikeForm, CustomUserCreationForm
class SignupView(View):
def get(self, request):
form = UserCreationForm()
return render(request, 'signup.html', {'form': form})
def post(self, request):
form = UserCreationForm(request.POST)
if form.is_valid():
form.save()
return redirect('login')
return render(request, 'signup.html', {'form': form})
class UserLoginView(View):
def get(self, request):
form = AuthenticationForm()
return render(request, 'login.html', {'form': form})
def post(self, request):
form = AuthenticationForm(request, data=request.POST)
if form.is_valid():
username = form.cleaned_data.get('username')
password = form.cleaned_data.get('password')
user = authenticate(username=username, password=password)
if user is not None:
login(request, user)
# Redirect to the home page on successful login
return redirect('home')
return render(request, 'login.html', {'form': form})
class UserLogoutView(View):
def get(self, request):
logout(request)
return redirect('login')
class QuestionPostView(LoginRequiredMixin, View):
login_url = reverse_lazy('login')
def get(self, request):
form = QuestionForm()
return render(request, 'post_question.html', {'form': form})
def post(self, request):
form = QuestionForm(request.POST)
if form.is_valid():
new_question = form.save(commit=False)
new_question.user = request.user
new_question.save()
return redirect('question_list')
return render(request, 'post_question.html', {'form': form})
class QuestionListView(View):
def get(self, request):
questions = Question.objects.all()
return render(request, 'question_list.html', {'questions': questions})
class AnswerPostView(LoginRequiredMixin, View):
login_url = reverse_lazy('login')
def get(self, request, question_id):
question = Question.objects.get(pk=question_id)
form = AnswerForm()
return render(request, 'post_answer.html', {'question': question, 'form': form})
def post(self, request, question_id):
question = Question.objects.get(pk=question_id)
form = AnswerForm(request.POST)
if form.is_valid():
new_answer = form.save(commit=False)
new_answer.user = request.user.userprofile
new_answer.question = question
new_answer.save()
return redirect('question_detail', question_id=
question.id)
return render(request, 'post_answer.html', {'question': question, 'form': form})
class LikeAnswerView(LoginRequiredMixin, View):
login_url = reverse_lazy('login')
def post(self, request, answer_id):
answer = Answer.objects.get(pk=answer_id)
Like.objects.create(user=request.user, answer=answer)
return redirect('question_detail', question_id=
answer.question.id)
class QuestionDetailView(View):
def get(self, request, question_id):
question = Question.objects.get(pk=question_id)
answers = Answer.objects.filter(question=question)
return render(request, 'question_detail.html', {'question': question, 'answers': answers})
urls.py
-------
from django.urls import path
from . import views
urlpatterns = [
path('signup/', views.SignupView.as_view(), name='signup'),
path('login/', views.UserLoginView.as_view(), name='login'),
path('logout/', views.UserLogoutView.as_view(), name='logout'),
path('post_question/', views.QuestionPostView.as_view(), name='post_question'),
path('question_list/', views.QuestionListView.as_view(), name='question_list'),
path('question/<int:question_id>/',
views.QuestionDetailView.as_view(), name='question_detail'),
path('question/<int:question_id>/post_answer/',
views.AnswerPostView.as_view(), name='post_answer'),
path('answer/<int:answer_id>/like/',
views.LikeAnswerView.as_view(), name='like_answer'),
path('question_detail/<int:question_id>/',
views.QuestionDetailView.as_view(), name='question_detail'),
]
project/urls.py
----------------
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('question_app.urls')),
]