Django报错:artichels_pagination.get()缺少必填参数'request'求助
Django ListView分页类错误排查与解决
错误原因
出现artichels_pagination.get() missing 1 required positional argument: 'request'的核心问题有两点:
- 重写的
get方法参数签名不符合Django类视图要求,缺少*args, **kwargs参数; - 方法内部未返回
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
相关产品推荐
相关产品推荐

