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

Django 2.0使用正则表达式获取主键时出现404错误求助

解决Django 2.0中正则路由匹配404的问题

你的问题出在Django 2.0路由语法的变化上——path()函数并不支持直接写正则表达式,它是为简洁的路径转换器设计的,而正则路由需要用re_path()(或者兼容旧版的url())来实现。这就是为什么你的详情页路由一直匹配不上,返回404错误。

下面给你两种可行的修复方案:

方案一:使用Django路径转换器(推荐)

Django 2.0+的path()支持内置的路径转换器,比如<int:pk>可以直接匹配整数类型的主键,写法更简洁且易读:

修改你的urls.py:

from django.urls import path
from . import views

urlpatterns = [
    path('', views.School_Lview.as_view(), name='list'),
    # 用<int:pk>替代正则表达式
    path('<int:pk>/', views.School_Dview.as_view(), name='detail')
]

方案二:改用re_path()写正则路由

如果你坚持要用正则表达式捕获主键,需要把path()换成re_path(),记得要先导入它:

修改后的urls.py:

from django.urls import path, re_path  # 导入re_path
from . import views

urlpatterns = [
    path('', views.School_Lview.as_view(), name='list'),
    # 用re_path包裹正则表达式,注意r前缀表示原生字符串
    re_path(r'(?P<pk>\d+)/', views.School_Dview.as_view(), name='detail')
]

额外优化:模板中使用反向解析(推荐)

你的模板里直接用{{school.id}}作为链接,虽然能工作,但更健壮的方式是用Django的URL反向解析,这样即使后续修改路由规则,模板链接也不会失效:

修改模板代码:

{% for school in schools %}
    <h2>
        <li><a href="{% url 'detail' pk=school.id %}">{{ school.name }}</a></li>
    </h2>
{% endfor %}

这样调整后,你的详情页路由就能正确匹配主键,不会再返回404错误了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:59:27