Получение 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})