The redirect function is not working properly.It is showing the error
NoReverseMatch at /post/new/ Reverse for 'post_detail' with arguments '()' and keyword arguments '{'pk': 9}' not found. 0 pattern(s) tried: []
this is my views.py
from django.shortcuts import render, redirect, get_object_or_404
from django.contrib.auth.models import User
from django.views.generic import View
from django.utils import timezone
from django.contrib.auth import (
authenticate,
get_user_model,
login,
logout,
)
from .forms import UserLoginForm, UserRegisterForm, UserForm, PostForm
from .models import Post
def login_view(request):
if request.method == "POST":
username = request.POST['username']
password = request.POST['password']
u = User.objects.get(username=username)
posts = objects.for_user(request.user)
if username and password:
user = authenticate(username= username, password= password)
if not user:
return render(request, 'post/login.html',{'error_message': 'Incorrect username or password'})
if not user.is_active:
return render(request, 'post/login.html', {'error_message': 'Your account has been disabled'})
if user.is_active:
login(request, user)
return render(request, 'post/home.html', {'u' : u, 'posts': posts})
return render(request, 'post/login.html')
class register_view(View):
form_class = UserRegisterForm
template_name = 'post/register.html'
def get(self, request):
form = self.form_class(None)
return render(request, self.template_name, {'form': form})
def post(self, request):
form = self.form_class(request.POST)
if form.is_valid():
user = form.save(commit=False)
username = form.cleaned_data['username']
password = form.cleaned_data['password']
user.set_password(password)
user.save()
new_user = authenticate(username= username, password= password)
if new_user is not None:
if user.is_active:
login(request, new_user)
return redirect('post/home.html')
return render(request, self.template_name, {'form' : form})
def logout_view(request):
logout(request)
form = UserForm(request.POST or None)
return render(request, 'post/login.html', {'form' : form})
def post_list(request):
posts = Post.objects.filter(published_date__lte=timezone.now()).order_by('published_date')
return render(request, 'post/post_list.html', {'posts': posts})
def post_detail(request, pk):
post = get_object_or_404(Post, pk=pk)
return render(request, 'post/post_detail.html', {'post': post})
def post_new(request):
if request.method == "POST":
form = PostForm(request.POST)
if form.is_valid():
post = form.save(commit=False)
post.author = request.user
post.published_date = timezone.now()
post.save()
return redirect('post_detail', pk=post.pk)
else:
form = PostForm()
return render(request, 'post/post_edit.html', {'form': form})