In my Project, I have an application called Score where users can upload Images, I am trying to add the Like functionality to these posts, using Ajax and Jquery to prevent the images from being refreshed.
The like option is working fine but still must be refreshed so that the updates appear. In the console I am getting
jquery.min.js:2 POST http://127.0.0.1:8000/like/ 404 (Not Found)
send @ jquery.min.js:2
ajax @ jquery.min.js:2
(anonymous) @ (index):241
dispatch @ jquery.min.js:2
v.handle @ jquery.min.js:2
Although it is supoosed to be http://127.0.0.1:8000/score/like/
My question is how to handle this error?
Worth to mention that I have another application that I am using the same Like Functionality but the application is used for completely different purposes.
Models.py
class Post(models.Model):
title = models.CharField(max_length=100, unique=True)
designer = models.ForeignKey(User, on_delete=models.CASCADE, related_name="post")
date_posted = models.DateTimeField(default=timezone.now)
likes = models.ManyToManyField(
User, related_name='liked_designs', blank=True)
num_likes = models.IntegerField(default=0, verbose_name='No. of Likes')
LIKE_CHOICES = (
('Like', 'Like'),
('Unlike', 'Unlike')
)
class Like(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE,related_name="liked_designs_users")
post = models.ForeignKey(Post, on_delete=models.CASCADE)
value = models.CharField(choices=LIKE_CHOICES,
default='Like', max_length=8)
Here is the post detail views.py
class PostDetailView(ObjectViewMixin, DetailView):
model = Post
template_name = "score/post_detail.html" # <app>/<model>_<viewtype>.html
def get_context_data(self, *args, **kwargs):
context = super(PostDetailView, self).get_context_data()
post = get_object_or_404(Post, slug=self.kwargs['slug'])
comments = Comment.objects.filter(post=post).order_by('-id')
total_likes = post.total_likes()
liked = False
if post.likes.filter(id=self.request.user.id).exists():
liked = True
context["total_likes"] = total_likes
context["liked"] = liked
return context
Here are the likes view.py
def Like_View(request):
# post = get_object_or_404(Post, id=request.POST.get('post_id'))
post = get_object_or_404(Post, id=request.POST.get('id'))
liked = False
current_likes = post.num_likes
user = request.user
if post.designer.id == request.user.id:
messages.warning(request, 'You can not like you own Post')
else:
if post.likes.filter(id=request.user.id).exists():
post.likes.remove(request.user)
liked = False
current_likes = current_likes - 1
else:
post.likes.add(request.user)
liked = True
current_likes = current_likes + 1
post.num_likes = current_likes
post.save()
context = {
'total_likes': post.total_likes,
'liked': liked,
'post': post,
}
if request.is_ajax:
html = render_to_string('score/like_section.html', context, request=request)
return JsonResponse({'form': html})
Here is the main project url
from score.views import Like_View
path('score/like/', Like_View, name='design_like_post'),
Here is the post-detail.html:
<div id="like-section-design">
{% include 'score/like_section.html' %}
</div>
Here is the score/like_section.html:
<form class="mt-0" action="{% url 'design_like_post' %}" method='post'>
{% csrf_token %}
{% if liked %}
<button type='submit' id="like" name='post_id' value='{{post.id}}' style="...">
Like <i class="far fa-thumbs-up"></i>
</button>
{% else %}
<button type='submit' id="like" name='post_id' value='{{post.id}}' style="...">
Like <i class="far fa-thumbs-up"></i>
</button>
{% endif %}
</form>
Here is the scripts:
<script type="text/javascript">
$(document).ready(function(event){
$(document).on('click','#like', function(event){
event.preventDefault();
var pk= $(this).attr('value');
$.ajax({
type:'POST',
url:'{% url "design_like_post" %}',
data:{'id': pk, 'csrfmiddlewaretoken':'{{csrf_token}}'},
dataType:'json',
success:function(response){
$('#like-section-design').html(response['form'])
console.log($('#like-section-design').html(response['form']));
},
error:function(rs, e){
console.log(rs.responseText);
},
});
});
});
</script>
Thank you for encouraging me to learn from my mistakes