是的,正确的写法为 <button id='like' type='button' name='post_id' class= "btn btn-primary btn-sm" value="{{ post.id}}"> Like </button>
Motaz Hejaze <trapper...@gmail.com> 于2020年5月20日周三 下午2:06写道: > Change your ajax method from "post" to "get" , you are not submitting any > data to use post . > > Also change the method in your form too , and share the error message > please. > > On Wed, 20 May 2020, 6:18 am Ahmed Khairy, <ahmed.heshamel...@gmail.com> > wrote: > >> Do you mean that this line should be changed? >> >> <button id='like' type='submit' name= >> 'post_id' class= "btn btn-danger btn-sm" value="{{post.id}}" >> > No ! Don't Print it </button> >> >> On Tuesday, May 19, 2020 at 11:11:12 PM UTC-4, Hella Nick wrote: >>> >>> button标签中的type属性设置为button, >>> >>> Ahmed Khairy <ahmed.he...@gmail.com> 于2020年5月20日周三 上午1:54写道: >>> >>>> 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...@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 >>>> <https://groups.google.com/d/msgid/django-users/5aaa1274-dd6b-42bc-8a5e-bce4596ace98%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/6aa0bb16-9ded-4ad6-8ffa-5d82713ec7ad%40googlegroups.com >> <https://groups.google.com/d/msgid/django-users/6aa0bb16-9ded-4ad6-8ffa-5d82713ec7ad%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/CAHV4E-dvD0y2Ocv0sfshUop%2BbczugiS%3DSux7W%2BU3VTSuqwsccg%40mail.gmail.com > <https://groups.google.com/d/msgid/django-users/CAHV4E-dvD0y2Ocv0sfshUop%2BbczugiS%3DSux7W%2BU3VTSuqwsccg%40mail.gmail.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/CAHfGPEfaMuTOk39ig80KcV58ak4F%3Dq9eL7zzVTQNvh597v-b7A%40mail.gmail.com.