Получение NoReverseMatch при нажатии на кнопку комментария

Я получал ту же ошибку при нажатии на кнопку like, Но ошибка была решена... После создания представления комментария и других сотрудников я снова получаю эту ошибку... Когда я нажимаю на кнопку комментария, появляется ошибка... Я очень новичок в Django, помогите мне, пожалуйста... Мой проект models.py, страница шаблона, urls.py, views.py прилагаются

Ваша кнопка комментария - это просто ссылка, это нормально? Я думаю, вы хотите отправить вашу форму, когда вы нажимаете на кнопку?

<div>
    <h4>
        Comments:
    </h4>
    {% for comment in comments %}
    <div>
        {{ user }} <br>
        <h5>{{ comment }}</h5>
    </div>
    {% endfor %}
    <!-- <h6>Add your comment:</h6> -->
    <form action="{% url 'comment' %}" method="POST">
        {% csrf_token %}
        {{form|crispy}} <br>
        <button type="submit" class="btn btn-sm btn-info">Comment</button>
    </form>
</div>

И я думаю, что ваша проблема возникла из-за того, что вы отобразили этот шаблон из просмотра комментариев, не установив блог в контекстных данных.

def blog_view(request, pk):
    blog = Blog.objects.get(id=pk)
    form = CommentForm()
    comments = Comment.objects.filter(blog=blog)
    context = {"blog": blog, "comments": comments, "form":form}
    return render(request, 'blog_app/blog_page.html', context)


def comment(request):
    form = CommentForm()
    if request.method == 'POST':
        form = CommentForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect("blog_page", pk=form.instance.blog.pk)
        return HttpResponse(status_code=400) # error case
    else:
        return HttpResponse(status_code=501) # try to GET page

Лучшее решение - передать blog pk в url, чтобы можно было вывести страницу с ошибкой:

path("blog/<int:pk>/comment/", views.comment, name="comment")
    <form action="{% url 'comment' blog.pk %}" method="POST">
        {% csrf_token %}
        {{form|crispy}} <br>
        <button type="submit" class="btn btn-sm btn-info">Comment</button>
    </form>
def comment(request, pk):
    blog = get_object_or_404(Blog, pk=pk)
    form = CommentForm()
    if request.method == 'POST':
        form = CommentForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect("blog_page", pk=blog.pk)
    return render(request, "...", {"blog": blog, "form": form})
Вернуться на верх