覆盖AJAX的generic.ListView方法请求DJANGO

问题描述 投票:0回答:1

我最近开始使用django的内置通用视图(创建,更新等)所以我正在更新我的大多数旧视图以使用它们,其中一个是ListView,带有分页。所以现在,它工作正常,当我获取该页面时,它按照指示显示对象,并且分页工作正常。但是我想在分页上使用AJAX,这样我只需单击“更多”按钮,它就会通过ajax获取下一页的对象,并附加到结尾处。所以我之前修改了一些通用视图来合并AJAX,如下所示:

class Delete(LoginRequiredMixin, UserPassesTestMixin, DeleteView):
   login_url = LOGIN_URL
   model = Items
   success_url = reverse_lazy('web:member-area')

   def test_func(self):
      return not self.request.user.is_superuser and self.get_object().created_by == self.request.user

   def delete(self, request, *args, **kwargs):
      response = super().delete(request)
      if self.request.is_ajax():
          return JsonResponse({'success': 1}, status=200)
      else:
          return response

在上面的代码片段中,您可以看到我包含的部分,如果请求是AJAX,它会返回不同的内容

我正在处理的当前视图如下:

class Items(ListView):
   model = Items
   paginate_by = 5
   context_object_name = 'items'
   template_name = 'web/items/index.html'

这对正常的GET请求工作正常,所以问题是我不知道哪个super()方法覆盖并返回一个不同的响应,如果它的那个ListView上的AJAX

ajax django django-views django-generic-views
1个回答
2
投票

使用dispatch

class Items(ListView):   
      def dispatch(request, *args, **kwargs):
             response = super().dispatch(request, *args, **kwargs)
             if request.is_ajax():              
                return JsonResponse({'success': 1}, status=200)
             else:
                return response 
© www.soinside.com 2019 - 2024. All rights reserved.