【问题标题】:Overriding generic.ListView methods for AJAX requests DJANGO覆盖 AJAX 请求的 generic.ListView 方法 DJANGO
【发布时间】:2019-06-21 13:54:17
【问题描述】:

我最近开始使用 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

在上面的 sn-p 中,您可以看到我包含了如果请求是 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】:

    使用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 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-19
      • 2021-12-19
      • 2013-08-20
      • 1970-01-01
      • 2017-01-04
      相关资源
      最近更新 更多