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

Django视图获取URL参数报错,请求解决路由匹配问题

解决方案

1. 修复URL路由配置

你的路由配置混合了正则表达式语法和路径转换器语法,导致无法匹配路径api/det/1,需要二选一修改:

方式一:使用Django 2.0+推荐的path语法

from django.urls import path
from . import views

urlpatterns = [
    path('api/det/<int:id>/', views.DetailsAPI.as_view(), name='DetailsAPI'),
]

方式二:使用正则表达式(re_path/url)

from django.conf.urls import url
from . import views

urlpatterns = [
    url(r'^api/det/(?P<id>\d+)/$', views.DetailsAPI.as_view(), name='DetailsAPI'),
]

注意:路由末尾的/是Django默认要求的(可通过APPEND_SLASH=False关闭,但不推荐),必须加上才能匹配路径。

2. 修复视图方法签名与参数获取

你的DetailsAPI的get方法参数签名错误,APIView的视图方法必须以request作为第一个参数,且参数需通过kwargs获取:

class DetailsAPI(APIView):
    def get(self, request, *args, **kwargs): 
        # 从kwargs中获取URL参数id
        id = kwargs.get('id')
        # 优化:直接用ORM过滤数据,避免全表查询后再筛选
        filter_list = Details.objects.filter(id=id)
        df = read_frame(filter_list)
        df_final = df.to_json(orient='records')
        return HttpResponse(df_final, content_type='application/json')

关键错误点说明:

  • 原视图get方法直接写id作为参数,不符合APIView的方法签名规范,会导致参数不匹配报错。
  • 原路由语法错误,url()(即re_path())不支持<int:id>这种路径转换器语法,必须用正则分组(?P<id>\d+);若要用<int:id>,需使用path()函数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 18:15:36