Я хочу использовать кнопку like с ajax, но у меня возникла проблема. Ошибка, которую я получаю при нажатии на кнопку like (Not Found: /like)
POST http://127.0.0.1:8000/like 404 (Not Found) Я совсем новичок в этом деле. Я думаю, что ошибка связана с перенаправлением url, но url, которые я использую, не работают, что я должен использовать?
Что я пытаюсь достичь, это понравиться сообщение без обновления страницы, когда я нажимаю кнопку "нравится".
models.py
class Post(models.Model):
likes = models.ManyToManyField(
User, related_name='like', default=None, blank=True)
like_count = models.BigIntegerField(default='0')
views.py
@ login_required
def like(request):
if request.POST.get('action') == 'post':
result = ''
id = int(request.POST.get('postid'))
post = get_object_or_404(Post, id=id)
if post.likes.filter(id=request.user.id).exists():
post.likes.remove(request.user)
post.like_count -= 1
result = post.like_count
post.save()
else:
post.likes.add(request.user)
post.like_count += 1
result = post.like_count
post.save()
return JsonResponse({'result': result, })
urls.py
urlpatterns = [
path('like', like, name='like'),
]
myscript
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script>
$(document).on('click', '#like-button', function (e) {
e.preventDefault();
$.ajax({
type: 'POST',
url: '{% url "like" %}',
data: {
postid: $('#like-button').val(),
csrfmiddlewaretoken: $('input[name=csrfmiddlewaretoken]').val(),
action: 'post'
},
success: function (json) {
document.getElementById("like_count").innerHTML = json['result']
},
error: function (xhr, errmsg, err) {
}
});
})
</script>
post_detail.html
{% if request.user.is_authenticated %}
<div class="pr-2">
<span class="" id="like_count">{{post.like_count}}</span>
<button class="btn btn-link text-dark p-0 border-0 btn-outline-light" id="like-button" value="{{post.id}}">
<svg width="1.5em" height="1.5em" viewBox="0 0 16 16" class="bibiheart"fill="currentColor"xmlns="http://www.w3.org/2000/svg"><path
fill-rule="evenodd"d="M8 2.748l-.717-.737C5.6.281 2.514.878 1.4
3.053c-.523 1.023-.641 2.5.314 4.385.92 1.815 2.834 3.989 6.286 6.357 3.452-2.368 5.365-4.542 6.286-6.357.955-1.886.838-3.362.314-4.385C13.486.878 10.4.28 8.717 2.01L8 2.748zM8 15C-7.333 4.868 3.279-3.04 7.824 1.143c.06.055.119.112.176.171a3.12 3.12 0 0 1 .176-.17C12.72-3.042 23.333 4.867 8 15z" /></svg>
</button>
</div>
{% endif %}