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

Django重定向报错:返回index视图时遇意外关键字参数page

问题分析与解决方案

错误原因

你遇到的TypeError: index() got an unexpected keyword argument 'page'错误,根源在于:

  1. URL路由配置错误:urls.py中定义的<int:cliente_id>/<str:page>路由,试图把page作为路径参数传递给index视图,但index视图的函数签名只接收request和cliente_id两个参数,不支持page参数。
  2. 重定向方式错误:up_load视图里用redirect('myApp:index', cliente_id=cliente_id, page=page)时,Django会把page当作路径参数匹配到错误路由,导致视图接收到未定义的参数。
  3. 你期望的URL是/Expedientes/4/?page=1,说明page应该是查询参数(GET参数),而非路径参数。

修复步骤

1. 清理冗余URL路由

修改urls.py,删除包含page的路径路由,因为page不需要作为路径的一部分,而是通过查询参数传递。优化后的路由如下:

from django.urls import path
from . import views

app_name = 'myApp'

urlpatterns = [
    path("", views.index, name="index"),
    path("<int:cliente_id>/", views.index, name="index"),
    path('up_load/', views.up_load, name='up_load'),
]

2. 修改up_load视图的重定向逻辑

将page作为查询参数拼接到重定向URL中,而非当作路径参数传递。修改后的views.py代码如下:

from django.urls import reverse
from django.shortcuts import render, redirect
# 确保导入你的表单、Paginator等依赖

def index(request, cliente_id=None):
    paginator = Paginator(client_list, 15)
    page_number = request.GET.get("page")
    page = paginator.get_page(page_number)

    context = {'cliente_id': cliente_id,
               'page': page,
               'paginator': paginator }
    return render(request, 'myApp/index.html', context)

def up_load(request):
    if request.method == 'POST':
        form = ExpeditensForm(request.POST, request.FILES)
        cliente_id = request.POST.get('cliente_id')  # 去掉默认值'/',用None更合理
        page = request.POST.get('page', '1')  # 默认页码设为1
        if form.is_valid():
            form.save()
            # 根据是否有cliente_id生成基础URL
            base_url = reverse('myApp:index', kwargs={'cliente_id': cliente_id}) if cliente_id else reverse('myApp:index')
            # 拼接page查询参数
            redirect_url = f"{base_url}?page={page}"
            return redirect(redirect_url)
        # 表单无效时的处理:返回原页面并保留页码和cliente_id
        base_url = reverse('myApp:index', kwargs={'cliente_id': cliente_id}) if cliente_id else reverse('myApp:index')
        return redirect(f"{base_url}?page={page}")

3. 验证效果

修复后,提交表单成功后会重定向到你期望的URL格式,比如/Expedientes/4/?page=1,index视图会通过request.GET.get("page")正确获取页码,不会再出现参数不匹配的错误。


内容的提问来源于stack exchange,提问作者Enrique Bruzual

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 13:23:15