I am currently trying to create a like button for my posts in Django
I have reached to the part where I can add a like but I am facing difficulty writing the code related to the view which linking the PostListView if there is user who liked it or not. I am getting an error: page Error 404 although everything is correct
this the views:
class PostListView(ListView):
model = Post
template_name = "score.html"
ordering = ['-date_posted']
context_object_name = 'posts'
queryset = Post.objects.filter(admin_approved=True)
paginate_by = 5
def get_context_data(self, **kwargs):
post = get_object_or_404(Post, id=self.request.POST.get('post_id'))
context = super(PostListView, self).get_context_data(**kwargs)
context['posts'][0].likes.filter(id=self.request.user.id).exists()
is_liked = False
if post.likes.filter(id=self.request.user.id).exists():
is_liked = True
context = {'post': post,
'is_like': is_liked,
}
return context
def like_post(request):
post = get_object_or_404(Post, id=request.POST.get('post_id'))
is_liked = False
if post.likes.filter(id=request.user.id).exists():
posts.likes.remove(request.user)
is_liked = False
else:
post.likes.add(request.user)
is_liked = True
return HttpResponseRedirect(post.get_absolute_url())
This is the model
class Post(models.Model): designer = models.ForeignKey(User, on_delete=models.CASCADE) title = models.CharField(max_length=100) date_posted = models.DateTimeField(default=timezone.now) likes = models.ManyToManyField(User, blank=True, related_name='likes') def __str__(self): return self.titleHere is thepath('like/', like_post, name='like_post'),here is the template: {% extends "base.html"%} {% block content %} {% for post in posts %} <div style="padding-top: 200 px;"><strong>{{post.title}}</strong></div> <form action="{% url 'score:like_post'%}" method="POST" class="ui form"> {% csrf_token %} {% if is_like %} <input type="hidden" name="post_id" value="{{post.id}}" /> <button class="ui button positive" type="submit">Unlike</button> {% else %} <button class="ui button negative" type="submit">Like</button> {% endif %} </form> <strong>Likes </strong> {% endfor %} {% endblock content %}
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users+unsubscribe@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/583492d8-5252-4f86-8e8f-7593b582d404%40googlegroups.com.
No comments:
Post a Comment