still showing the same error

On Wednesday, May 13, 2020 at 2:34:03 PM UTC-4, Yamen Gamal Eldin wrote:
>
> I haven't seen any definition for user within ur function, so 
> Change this 
> post.is_liked = post.likes.filter(user=user).exists()
>
> To this
>
> post.is_liked = post.likes.filter(user=request.user).exists()
>
>
> Le mer. 13 mai 2020 à 19:22, Ahmed Khairy <ahmed.he...@gmail.com 
> <javascript:>> a écrit :
>
>> Hi There, 
>>
>> I have rewritten the get_context_data method to be like this but I am 
>> getting name 'user' is not defined:
>>
>>
>> class PostListView(ListView):
>>     model = Post
>>     template_name = "score.html"
>>     ordering = ['-date_posted']
>>     context_object_name = 'posts'
>>     paginate_by = 5
>>
>>     def get_context_data(self, **kwargs):
>>         context_data = super(PostListView, self).get_context_data(**
>> kwargs)
>>         for post in context_data['posts']:
>>             post.is_liked = post.likes.filter(user=user).exists() <----- 
>> name 'user' is not defined
>>         return context
>>
>> I am also using this template just for testing till fix the issue 
>>
>> Thank you Andreas with me
>>
>>
>> On Wednesday, May 13, 2020 at 12:31:15 PM UTC-4, Andréas Kühne wrote:
>>>
>>> Hi again,
>>>
>>> Bare with me - this is just written in this email - so:
>>>
>>> 1. Your listview is paginated by 5, so it will only show 5 posts - 
>>> that's good for this exercise and how I would solve it.
>>> 2. Rewrite your get_context_data method to iterate over the posts:
>>>     def get_context_data(self, **kwargs):
>>>         context_data = super(PostListView, 
>>> self).get_context_data(**kwargs)
>>>         for post in context_data['posts']:
>>>             post.is_liked = post.likes.filter(user=user).exists()
>>>         return context
>>>
>>> So now your page should show. In the page 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">
>>>   <input type="hidden" name="post_id" value="{{post.id}}" />{% csrf_token 
>>> %} {% if is_like %}   <button class="ui button positive" 
>>> type="submit">Unlike</button>
>>>
>>>   {% else %}
>>>   <button class="ui button negative" type="submit">Like</button>
>>>   {% endif %}</form>{% endfor %} {% endblock content %} 
>>>
>>> Something like this should give you the functionality you want - however 
>>> it's still a bit cumbersome.
>>>
>>> Regards,
>>>
>>> Andréas
>>>
>>>
>>> Den ons 13 maj 2020 kl 15:24 skrev Ahmed Khairy <ahmed.he...@gmail.com>:
>>>
>>>> Hi Andréas Kühne,
>>>>
>>>> Regarding the first error
>>>>
>>>> I have a list of posts in the listView and want to add the like button 
>>>> to each post so how should I fix it? 
>>>>
>>>> Thank you 
>>>>
>>>> On Wednesday, May 13, 2020 at 6:08:31 AM UTC-4, Andréas Kühne wrote:
>>>>>
>>>>> Hi,
>>>>>
>>>>> There are a couple of errors in your code:
>>>>>
>>>>> 1. You are using a ListView and then trying to get an individual post? 
>>>>> That is really strange
>>>>> 2. In your get_context_data method - you first get the context data, 
>>>>> update it and then you set it to a new dict, so everything is reset in 
>>>>> the 
>>>>> dict.
>>>>> 3. you are trying to get the absolut url for your post, but aren't 
>>>>> showing any post detail view.
>>>>>
>>>>> Regards,
>>>>>
>>>>> Andréas
>>>>>
>>>>>
>>>>> Den ons 13 maj 2020 kl 06:46 skrev Ahmed Khairy <ahmed.he...@gmail.com
>>>>> >:
>>>>>
>>>>>> 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.title
>>>>>>
>>>>>> Here is the
>>>>>>
>>>>>> path('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...@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
>>>>>>  
>>>>>> <https://groups.google.com/d/msgid/django-users/583492d8-5252-4f86-8e8f-7593b582d404%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>>>> .
>>>>>>
>>>>> -- 
>>>> 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...@googlegroups.com.
>>>> To view this discussion on the web visit 
>>>> https://groups.google.com/d/msgid/django-users/aee352a1-2938-42a6-98cb-5d602abba567%40googlegroups.com
>>>>  
>>>> <https://groups.google.com/d/msgid/django-users/aee352a1-2938-42a6-98cb-5d602abba567%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>> .
>>>>
>>> -- 
>> 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...@googlegroups.com <javascript:>.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/django-users/58be585f-357c-4454-acad-6799abe2e43d%40googlegroups.com
>>  
>> <https://groups.google.com/d/msgid/django-users/58be585f-357c-4454-acad-6799abe2e43d%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>>
>

-- 
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+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/d65b8dcb-b7e3-472d-8892-fb4c8e477109%40googlegroups.com.

Reply via email to