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 %}