I am trying to use Ajax to submit a like button, I believe everything is in 
order but I keep getting django.urls.exceptions.NoReverseMatch: Reverse for 
'like_post' with arguments '('',)' not found. 1 pattern(s) tried: 
['score/like/(?P<pk>[0-9]+)$']


I am not sure what is the reason. Need help to identify the error.


Here is the view


class PostDetailView(DetailView):
    model = Post
    template_name = "post_detail.html"

    def get_context_data(self, *args, **kwargs):
        context = super(PostDetailView, self).get_context_data()
        stuff = get_object_or_404(Post, id=self.kwargs['pk'])
        total_likes = stuff.total_likes()
        liked = False
        if stuff.likes.filter(id=self.request.user.id).exists():
            liked = True
        context["total_likes"] = total_likes
        context["liked"] = liked
        return context


def LikeView(request, pk):
    # post = get_object_or_404(Post, id=request.POST.get('post_id'))
    post = get_object_or_404(Post, id=request.POST.get('id'))
    like = False
    if post.likes.filter(id=request.user.id).exists():
        post.likes.remove(request.user)
        like = False
    else:
        post.likes.add(request.user)
        like = True
    context["total_likes"] = total_likes
    context["liked"] = liked

    if request.is_ajax:
        html = render_to_string('like_section.html', context, request=
request)
        return JsonResponse({'form': html})

Here is the url.py updated

urlpatterns = [
    path('user/<str:username>', UserPostListView.as_view(), name=
'user-posts'),
    path('', PostListView.as_view(), name='score'),
    path('who_we_Are/', who_we_are, name='who_we_are'),
    path('<int:pk>/', PostDetailView.as_view(), name='post-detail'),
    path('like/<int:pk>', LikeView, name='like_post'),
    path('new/', PostCreateView.as_view(), name='post-create'),
    path('<int:pk>/update/', PostUpdateView.as_view(), name='post-update'),
    path('<int:pk>/delete/', PostDeleteView.as_view(), name='post-delete')
]

here is the template

                        <form class="mt-0" action="{% url 'score:like_post' 
post.pk %}" method='POST'>
                            {% csrf_token %}
                            <strong> Likes: {{total_likes}} </strong> 
                            {% if user.is_authenticated %}
                            {% if liked %}
                                <button id='like' type='submit' name=
'post_id' class= "btn btn-danger btn-sm" 
value="{{post.id}}"> Unlike </button>                            
                            {% else %}
                                <button id='like' type='submit' name=
'post_id' class= "btn btn-primary btn-sm" 
value="{{post.id}}"> Like </button>                            
                            {% endif  %}
                            {% else %}
                            <p><small><a href="{% url 'login' %}"> Login</a
> to Like </small></p>
                            {% endif %}                   
                        </form>   

here is the ajax

    <script src=
"https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js";></script>
    
    <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 "score:like_post" post.pk %}',
                    data:{'id': pk, 'csrfmiddlewaretoken':'{{csrf_token}}'},
                    dataType:'json', 
                    success:function(response){
                        $('#like-section').html(response['form'])
                        console.log($('#like-section').html(response['form'
]));                    
                    },
                    error:function(rs, e){
                        console.log(rs.responseText);                   
                    },
                });
            });
        });
    </script>


-- 
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/5aaa1274-dd6b-42bc-8a5e-bce4596ace98%40googlegroups.com.

Reply via email to