You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django报错:artichels_pagination.get()缺少必填参数'request'求助

Django ListView分页类错误排查与解决

错误原因

出现artichels_pagination.get() missing 1 required positional argument: 'request'的核心问题有两点:

  1. 重写的get方法参数签名不符合Django类视图要求,缺少*args, **kwargs参数;
  2. 方法内部未返回render生成的响应对象,导致视图逻辑不完整。

另外,继承ListView时手动实现分页属于冗余操作——ListView本身已内置分页功能,无需重复编写分页逻辑。

解决方法

推荐方案:利用ListView内置分页(简洁高效)

直接配置paginate_by属性实现分页,无需重写get方法:

class ArticlesPagination(ListView):
    # 遵循PEP8规范,类名使用大驼峰命名
    queryset = models.Article.objects.all().order_by('-upload')
    template_name = 'blog.html'
    paginate_by = 2  # 指定每页显示2条数据
    context_object_name = 'artichel'  # 自定义上下文变量名,对应模板中的变量

配置完成后,Django会自动处理分页逻辑,请求中的page参数会被自动识别,模板中可直接通过artichel(即分页后的Page对象)遍历数据,同时还能使用is_paginated、page_obj.has_previous等分页相关变量实现分页导航。

备选方案:修正自定义get方法(不推荐)

如果坚持手动实现分页逻辑,需修正参数签名并返回响应对象:

class artichels_pagination(ListView):
    queryset = models.article.objects.all().order_by('-upload')
    template_name = 'blog.html'

    def get(self, request, *args, **kwargs):
        # 补充*args, **kwargs参数,符合类视图方法签名要求
        page_artichel = Paginator(self.queryset, 2)
        page_number = request.GET.get('page')
        page_obj = page_artichel.get_page(page_number)
        return render(request, self.template_name, context={'artichel': page_obj})
        # 必须返回render生成的HttpResponse对象

额外建议

  • 代码遵循PEP8规范:类名、模型类名使用大驼峰命名(如ArticlesPagination、Article),提升代码可读性;
  • 优先使用Django内置视图的原生功能,减少重复代码和潜在bug。

内容的提问来源于stack exchange,提问作者amir mohammad babazadeh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 15:17:16