Keyword arguments not found error

Hi all,
I’m still debugging, but I’m having trouble seeing what’s going on here. Could you help me spot what’s wrong?

The two errors I’m getting are:


# NoReverseMatch at /categories/2/posts/new

Reverse for 'category_posts' with keyword arguments '{'category_id': ''}' not found. 1 pattern(s) tried: ['categories/(?P<category_id>[0-9]+)/posts$']

# NoReverseMatch at /categories/2/posts/2

Reverse for 'post_update' with keyword arguments '{'category_id': 2}' not found. 1 pattern(s) tried: ['categories/(?P<category_id>[0-9]+)/posts/(?P<int_post_id>[^/]+)/edit$']

urls.py

from django.urls import path
from . import views

urlpatterns = [

    path('', views.list_all_categories, name='categories_list'),
    path('new', views.create_new_category, name='category_new'),
    path('<int:category_id>/edit', views.update_category, name='category_update'),
    path('<int:category_id>/delete', views.delete_category, name='category_delete'),
    path('<int:category_id>/posts', views.list_category_posts, name='category_posts'), 
    path('<int:category_id>/posts/<int:post_id>', views.see_post, name='post_view'),
    path('<int:category_id>/posts/new', views.create_new_post, name='post_new'),
    path('<int:category_id>/posts/<int_post_id>/edit', views.update_post, name='post_update'),
    path('<int:catgory_id>/posts/<int:post_id>/delete', views.delete_post, name="post_delete")

]

views.py

from django.shortcuts import render, redirect, HttpResponse
from .models import Category, Post
from .forms import CategoryForm, PostForm
import datetime
import pdb

"""All the category controllers"""
def get_category(category_id):
    return Category.objects.get(id=category_id)

def list_all_categories(request):
    categories = Category.objects.all() 
    return render(request, 'categories/category_list.html', {'categories': categories})

def list_category_posts(request, category_id):
    specific_category = get_category(category_id)
    posts = specific_category.posts.all()
    return render(request, 'categories/category_posts.html', {'category': specific_category, 'posts': posts})

def create_new_category(request):
    if request.method == "POST":
        category_form = CategoryForm(request.POST)
        if category_form.is_valid():
            new_category = category_form.save(commit=False)
            new_category.save()
            return redirect('cljunior:categories_list') #this is the path name not the html file name
    else:
        category_form = CategoryForm()
        return render(request, 'categories/category_form.html', {'category_form': category_form, 'form_type': 'new'})

def update_category(request, category_id):
    selected_category = get_category(category_id)
    if request.method == "POST":
        category_form = CategoryForm(request.POST, instance=selected_category)
        if category_form.is_valid():
            updated_category = category_form.save(commit=False)
            updated_category.save()
            return redirect('cljunior:category_posts', category_id=updated_category.id)
    else:
        category_form = CategoryForm(instance=selected_category)
        return render(request, 'categories/category_form.html', {'category_form': category_form, 'form_type': 'update'})

def delete_category(request, category_id):
    selected_category = get_category(category_id)
    if request.method=='POST':
        selected_category.delete()
        return redirect('cljunior:categories_list')
    else:
        return render(request, 'categories/category_delete.html', {'selected_category' : selected_category})



"""All the post controllers"""
def get_post(post_id):
    return Post.objects.get(id=post_id)

def see_post(request, category_id, post_id):
    specific_category = Category.objects.get(id=category_id)
    specific_post = specific_category.posts.get(id=post_id)
    return render(request, 'posts/post_view.html', {'category': specific_category, 'post': specific_post})

def create_new_post(request, category_id):
    category = get_category(category_id)
    if request.method == "POST":
        post_form = PostForm(request.POST)
        if post_form.is_valid():
            new_post = post_form.save(commit=False)
            pdb.set_trace()
            new_post.category = category
            new_post.save()
            return redirect('cljunior:category_posts', category_id=new_post.category.id)
    else:
        post_form = PostForm()
        return render(request, 'posts/post_form.html', {'post_form': post_form, 'form_type': 'new'})

def update_post(request, category_id, post_id):
    selected_post = get_post(post_id)
    if request.method == "POST":
        post_form = PostForm(request.POST, instance=selected_post)
        if post_form.is_valid():
            updated_post = post_form.save(commit=False)
            updated_post.save()
            return redirect('cljunior:category_posts', {'category_id': category.id})
    else:
        category_form = PostForm(instance=selected_category)
        return render(request, 'posts/post_form.html', {'post_form': post_form, 'form_type': 'update'})

def delete_post(request, category_id, post_id):
        selected_post = get_post(post_id)
        if request.method=='POST':
            selected_post.delete()
            return redirect('cljunior:categories_posts', {'category_id': category.id})
        else:
            return render(request, 'posts/post_delete.html', {'selected_post' : selected_post})

category_posts.html

{% extends 'categories/base.html' %}
{% block content %}
<h2> craigslist junior </h2>
<p> {{category.category_name}}</p>
<ul>
{% for post in posts %}
    <div>
        <li><a href="{% url 'cljunior:post_view' category_id=category.id post_id=post.id %}">{{post.title}}</a></li>
    </div>
{% endfor %}
</ul>

<a href="{% url 'cljunior:post_new' category_id=category.id %}">new post</a>
<a href="{% url 'cljunior:category_delete' category_id=category.id %}">delete category</a>
<a href="{% url 'cljunior:category_update' category_id=category.id %}">update category</a>
<a href="{% url 'cljunior:categories_list' %}">back</a>
{% endblock %}