Django.urls.exceptions.NoReverseMatch: Обратное соответствие для 'like_qa' с аргументами '('',)' не найдено
У меня есть приложение Django с кнопкой like, которое я реализовал на основе этого учебника. URL отличается в моем приложении, потому что я не ставлю 'id' в URL, а только slug.
При нажатии на кнопку "Мне нравится" счетчик добавляет лайки, но не показывает обновленный счетчик, пока страница не обновится. Я получаю следующую ошибку каждый раз, когда нажимаю на кнопку "Мне нравится":
Traceback (most recent call last):
...
django.urls.exceptions.NoReverseMatch: Reverse for 'like_qa' with arguments '('',)' not found. 1 pattern(s) tried: ['like_qa/(?P<slug>[-a-zA-Z0-9_]+)/$']
[17/Mar/2022 12:44:49] "POST /like_qa/how-to-add-products-to-the-catalog/ HTTP/1.1" 500 149900
views.py
@login_required
def LikeQA(request, slug):
article = get_object_or_404(QA, slug=slug)
liked = False
if article.likes.filter(id=request.user.id).exists():
article.likes.remove(request.user)
liked = False
else:
article.likes.add(request.user)
liked = True
context = {
'like': article,
'liked': liked,
'total_likes_qa': article.total_likes_qa(),
}
if request.is_ajax():
html = render_to_string('components/like_section_ajax.html', context, request=request)
return JsonResponse({'form': html})
urls.py
path('like_qa/<slug:slug>/', views.LikeQA, name='like_qa'),
like_section_ajax.html
{% if request.user.is_authenticated %}
<form action="{% url 'like_qa' qa.slug %}" method="POST">
{% csrf_token %}
{% if liked %}
<button type="submit" id="like" name="qa_slug", value="{{qa.slug}}" class="btn btn-clicked"><i class='bx bxs-like'></i></button>
{% else %}
<button type="submit" id="like" name="qa_slug", value="{{qa.slug}}" class="btn btn-to-be-clicked"><i class='bx bx-like'></i></button>
{% endif %}
{{ total_likes_qa }} like{{ total_likes_qa|pluralize }}
</form>
{% endif%}
QADetail.html
<script type="text/javascript">
$(document).ready(function(event){
$(document).on('click', '#like', function(event){
event.preventDefault();
var slug = $(this).attr('value');
$.ajax({
type: 'POST',
url: '{% url "like_qa" qa.slug %}',
data: {'slug':slug, 'csrfmiddlewaretoken': '{{ csrf_token }}'},
dataType: 'json',
success: function(response){
$('#like-section').html(response['form'])
console.log($('#like-section').html(response['form']));
},
error: function(rs, e){
console.log(rs.responseText);
},
});
});
});
ВОПРОС
Что я упускаю в своем коде? Почему я получаю обратную ошибку при нажатии на кнопку "Мне нравится"? Как я могу это исправить?