Создание подкаталогов в django?

Я пытаюсь создать простой сайт, который содержит записи (посты в блоге), организованные в url по example.com/blog/category_id/post_id

Однако то, что я сейчас делаю, разрешает только example.com/blog/category_id. Может ли кто-нибудь показать мне, как изменить код, чтобы сделать его:

  1. List all blog posts when going to example.com/blog
  2. List all blog posts of a particular category when going to example.com/blog/category_id
  3. List a particular blog post when going to example.com/blog/category_id/post_id

Спасибо!

Если мне необходимо предоставить дополнительную информацию, пожалуйста, сообщите мне.

blog.urls.py

from django.urls import path
from . import views

app_name = "blog"
urlpatterns = [
        path('', views.index, name='index'),
        path('<int:welcome_id>/', views.welcome_detail, name='welcome_detail'),
        path('blog/<int:category_id>/', views.category, name="category"),
        path('blog/<int:category_id>/<int:blog_id>/', views.category, views.blog_post_detail, name="blog_detail"),
        ]

blog/models.py

from django.db import models

class WelcomePage(models.Model):
    greeting_text = models.TextField(max_length=2000)
  
    def most_recently_published(self):
        return Status.objects.order_by('id')[0]

    def __str__(self):
        return self.greeting_text


class Categories(models.Model):
    name = models.CharField(max_length=200)
    category_title = models.CharField(max_length=200, default='')

    def get_categories(self):
        return Status.objects.order_by('id')

    def __str__(self):
        return self.name

class BlogPost(models.Model):
    blog_title = models.CharField(max_length=200)
    blog_text = models.TextField(max_length=10000)
    pub_date = models.DateTimeField('date published')
    categories = models.ForeignKey(Categories, null=True, on_delete=models.SET_NULL)

    def most_recently_published(self):
        return Status.objects.order_by('id')[:5]

    def __str__(self):
        return self.blog_title

blog/views.py

from django.shortcuts import render
from django.template import loader
from django.http import HttpResponse, Http404
from .models import WelcomePage, BlogPost, Categories

def index(request):
    latest_welcome_message = WelcomePage.objects.order_by('id')
    latest_blog_posts = BlogPost.objects.order_by('id')
    categories = Categories.objects.order_by('id')
    template = loader.get_template('blog/index.html')
    context = {'latest_welcome_message' : latest_welcome_message, 'latest_blog_posts' : latest_blog_posts, "categories" : categories}
        
    return render(request, 'blog/index.html', context)

def welcome_detail(request, welcome_id):
    try:
        welcome_message = WelcomePage.objects.get(pk=welcome_id)
    except WelcomePage.DoesNotExist:
        raise Http404("Question does not exist")
    return render(request, 'blog/detail.html', {'welcome_message':welcome_message})

def category(request, category_id):
    try:
        blogs_of_category = BlogPost.objects.get(categories=category_id)
    except BlogPost.DoesNotExist:
        raise Http404("Blog does not exist")
    return render(request, "blog/category.html", {"category":blogs_of_category})

def blog_post_detail(request, blog_id):
    try:
        blog_post_detail = BlogPost.objects.get(pk=blog_id)
    except BlogPost.DoesNotExist:
        raise Http404("Blog does not exist")
    return render(request, "blog/blogdetail.html", {"blog":blog_post_detail})
Вернуться на верх