Как я могу позволить пользователям создавать свои собственные сообщения в Django?

Я пытаюсь создать дискуссионный форум с помощью Django. Сначала я сделал тестовый пост с помощью Django admin, но теперь хочу реализовать форму, чтобы любой пользователь мог написать пост. Идея заключается в том, чтобы на главной странице форума был список всех существующих сообщений, а нажатие на кнопку "Создать сообщение" приводило бы пользователя к форме сообщения, и после отправки он мог бы увидеть свое сообщение в списке. У меня есть готовый код для формы, и я думал, что правильно подключил его к URL, но при нажатии на кнопку "Создать сообщение" я получаю пустую страницу. Я новичок в Django, и мне нужна помощь в решении этой проблемы. Вот мои файлы:

Models.py:

class Category(models.Model):
    name = models.CharField(max_length=20)

class Post(models.Model):
    title = models.CharField(max_length=255)
    author = models.CharField(max_length=60, default= 'None')
    body = models.TextField()
    created_on = models.DateTimeField(auto_now_add=True)
    last_modified = models.DateTimeField(auto_now=True)
    categories = models.ManyToManyField('Category', related_name='posts')

class Comment(models.Model):
    author = models.CharField(max_length=60)
    body = models.TextField()
    created_on = models.DateTimeField(auto_now_add=True)
    post = models.ForeignKey('Post', on_delete=models.CASCADE)

Forms.py:

class CommentForm(forms.Form):
    author = forms.CharField(
        max_length=60,
        widget=forms.TextInput(attrs={
            "class": "form-control",
            "placeholder": "Your Name"
        })
    )
    body = forms.CharField(widget=forms.Textarea(
        attrs={
            "class": "form-control",
            "placeholder": "Leave a comment!"
        })
    )

class PostForm(forms.Form):
    title = forms.CharField(
        max_length=255,
        widget=forms.TextInput(attrs={
            "class": "form-control",
            "placeholder": "Title"
        })
    )    
    author = forms.CharField(
        max_length=60,
        widget=forms.TextInput(attrs={
            "class": "form-control",
            "placeholder": "Your Name"
        })
    )
    body = forms.CharField(widget=forms.Textarea(
        attrs={
            "class": "form-control",
            "placeholder": "Leave a Post!"
        })
    )

Views.py:

def blog_index(request):
    posts = Post.objects.all().order_by('-created_on')
    context = {
        "posts": posts,
    }
    return render(request, "blog_index.html", context)

def blog_category(request, category):
    posts = Post.objects.filter(
        categories__name__contains=category
    ).order_by(
        '-created_on'
    )
    context = {
        "category": category,
        "posts": posts
    }
    return render(request, "blog_category.html", context)

def blog_detail(request, pk):
    post = Post.objects.get(pk=pk)

    form = CommentForm()
    if request.method == 'POST':
        form = CommentForm(request.POST)
        if form.is_valid():
            comment = Comment(
                author=form.cleaned_data["author"],
                body=form.cleaned_data["body"],
                post=post
            )
            comment.save()
    comments = Comment.objects.filter(post=post)
    context = {
        "post": post,
        "comments": comments,
        "form":form,
    }

    return render(request, "blog_detail.html", context)

def blog_post(request):

    post_form = PostForm()
    if request.method == 'POST':
        post_form = PostForm(request.POST)
        if post_form.is_valid():
            post = Post(
                title=post_form.cleaned_data["title"],
                author=post_form.cleaned_data["author"],
                body=post_form.cleaned_data["body"],
            )
            post.save()

    context = {
        "post_form":post_form,
    }

    args= {}
    args['post_form']= post_form

    return render(request, "blog_post.html", args)

А вот URL-адреса:

urlpatterns = [
    path("", views.blog_index, name="blog_index"),
    path("<int:pk>/", views.blog_detail, name="blog_detail"),
    path("<category>/", views.blog_category, name="blog_category"),
    path("post_form/", views.blog_post, name="blog_post")
]

В заключение, вот html-файлы для индекса поста и формы поста (у меня также есть два других html-файла для детализации поста и категории поста, но я думаю, что они мне сейчас не нужны).

индекс форума html

{% extends "base.html" %}
{% block page_content %}
<div class="col-md-8 offset-md-2">
    <h1>Blog Index</h1>
    <hr>
    {% for post in posts %}
    <h2><a href="{% url 'blog_detail' post.pk%}">{{ post.title }}</a></h2>
    <small>
        {{ post.created_on.date }} |&nbsp;
        Categories:&nbsp;
        {% for category in post.categories.all %}
        <a href="{% url 'blog_category' category.name %}">
            {{ category.name }}
        </a>&nbsp;
        {% endfor %}
    </small>
    <p>{{ post.body | slice:":400" }}...</p>
    {% endfor %}

    <a class="btn btn-primary" href="{% url 'blog_post' %}" role="button">Create a Post</a>
    

</div>
{% endblock %}

Почтовая форма html

{% extends "base.html" %}
{% block page_content %}
<div class="col-md-8 offset-md-2">
<h3>Write your post:</h3> 
    <form action="/blog/" method="post">
        {% csrf_token %}
        <div class="form-group">
            {{ post_form.title }}
        </div>
        <div class="form-group">
            {{ post_form.author }}
        </div> 
        <div class="form-group">
            {{ post_form.body }}
        </div> 
        <a button type="submit" class="btn btn-primary" href="{% url 'blog_index' %}" role="button">Submit</a>
        
    </form>
{% endblock %}

Заранее благодарю за любой совет!

Попробуйте использовать

urlpatterns = [
    path("", views.blog_index, name="blog_index"),
    path("blog_detail/<int:pk>", views.blog_detail, name="blog_detail"),
    path("blog_category/<str:category>", views.blog_category, name="blog_category"),
    path("blog_post/", views.blog_post, name="blog_post")
]
Вернуться на верх