Я работаю над кнопкой «Мне нравится» с javascript и ajax и получаю сообщение об ошибке без обратного соответствия при вызове через ajax, но без вызова ajax все работает нормально. Другое дело, это хорошо работает на странице сведений, но не на главной странице, и именно здесь появляется эта ошибка.
Это ошибка:
Reverse for 'like_post' with no arguments not found. 1 pattern(s) tried: ['posts/(?P<slug>[^/]+)/like/$']
js
$(document).ready(function(event){
$(document).on('click', '#like', function(event){
event.preventDefault();
var pk = $(this).attr('value');
$.ajax({
type: 'POST',
url: '{% url "posts:like_post" %}',
data: {'slug': pk, 'csrfmiddlewaretoken': '{{ csrf_token }}'},
datatype: 'json',
success: function(response){
$('#like-snip').html(response['form'])
console.log($('#like-snip').html(response['form']));
},
error: function(rs, e){
console.log(rs.responseText);
},
});
});
});
views.py
@login_required
def like_post(request, slug):
user = request.user
post = get_object_or_404(Post, slug=slug)
# post = get_object_or_404(Post, id=request.POST.get('id'))
# url_ = post.get_absolute_url()
is_liked = False
if user in post.likes.all():
post.likes.remove(request.user)
is_liked = False
else:
post.likes.add(request.user)
is_liked = True
context = {
'post':post,
'is_liked':is_liked,
'total_likes':post.total_likes()
}
if request.is_ajax():
html = render_to_string('posts/like_snippet.html', context, request=request)
return JsonResponse({'form': html})
urls
path('<slug>/like/', views.like_post, name='like_post'),
like_snippet. html
<form action="{% url 'posts:like_post' post.slug %}" method="post">{% csrf_token %}
{% if is_liked %}
<button type="submit" id="like" name="post_slug" value="{{ post.slug }}" class="btn-sm btn-outline-danger">{{ post.likes.count}} Unlike{{ post.likes.count|pluralize }}</button>
{% else %}
<button type="submit" id="like" name="post_slug" value="{{ post.slug }}" class="btn-sm btn-outline-info">{{ post.likes.count}} Like{{ post.likes.count|pluralize }}</button>
{% endif %}
</form>
и здесь находится аналогичный раздел в myhome. html и подробностях. html
<div id="like-snip">
{% include 'posts/like_snippet.html' %}
</div>
Заранее спасибо, ребята!