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

使用Django re_path后正则表达式未解析,请求解决方案

Django URL正则解析异常的解决思路

问题场景

你的URL配置代码如下:

主urls.py

from django.contrib import admin
from django.urls import include, re_path, path

urlpatterns = [
    path('admin/', admin.site.urls),
    re_path(r'^', include('tutorials.urls')),
]

tutorials/urls.py

from django.urls import re_path
from tutorials import views

urlpatterns = [
    re_path(r'^api/tutorials$', views.tutorial_list),
    re_path(r'^api/tutorials/(?P<pk>[0-9]+)$', views.tutorial_detail),
    re_path(r'^api/tutorials/published$', views.tutorial_list_published)
]

执行python manage.py runserver后访问API出现正则未解析的异常。


解决思路

  • 修正子路由正则的末尾斜杠匹配:Django默认开启APPEND_SLASH配置,会自动重定向带斜杠的URL。当前子路由正则是精确匹配无斜杠的路径(如^api/tutorials$),访问/api/tutorials/时会匹配失败。可以将正则改为支持可选斜杠:

    re_path(r'^api/tutorials/?$', views.tutorial_list),
    re_path(r'^api/tutorials/(?P<pk>[0-9]+)/?$', views.tutorial_detail),
    re_path(r'^api/tutorials/published/?$', views.tutorial_list_published)
    

    或者在settings.py中设置APPEND_SLASH = False(不推荐,不符合RESTful URL规范)。

  • 替换主路由的正则写法:主路由中re_path(r'^', include('tutorials.urls'))可以简化为path('', include('tutorials.urls')),path是Django推荐的精确路径匹配方式,避免正则表达式的潜在歧义。

  • 检查视图函数的正确性:异常不一定来自路由,需确认views.tutorial_list、views.tutorial_detail等函数是否正确返回HTTP响应(比如使用JsonResponse),是否存在语法错误或逻辑异常。

  • 确认路由匹配顺序:确保更具体的路由放在前面(比如api/tutorials/published要早于api/tutorials/(?P<pk>[0-9]+)),当前配置的顺序是正确的,但后续新增路由时需注意这一点。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 05:35:27