Django中Reverse for 'detail'匹配失败报错求助
解决NoReverseMatch错误的方案
问题根源
你用的URL正则page/(?P<key>[^/]+)\Z里,[^/]+是只匹配不含斜杠的字符,但你要传递的key是2022/11/29/oddballers-29112022,包含多个斜杠,完全不符合正则的匹配规则,所以反向解析时找不到对应的detail路由。
两种解决办法
方法一:修改URL规则,允许key包含斜杠
用Django自带的path转换器<path:key>,它会匹配包含斜杠的任意字符串,替换原来的正则写法:# urls.py path('page/<path:key>/', views.detail, name='detail')如果是用
re_path(旧的url函数),可以把正则改成允许匹配斜杠:re_path(r'^page/(?P<key>.+)/$', views.detail, name='detail')注意:如果你的URL配置里还有其他以
page/开头的路由,要把这个规则放在最下面,避免匹配冲突。方法二:修改key的格式,移除斜杠
把key里的斜杠替换成其他不冲突的字符,比如连字符或下划线,比如将2022/11/29/oddballers-29112022改成2022-11-29-oddballers-29112022,这样原来的[^/]+正则就能正常匹配,反向解析也不会报错。
额外提醒
如果用方法一,要确保视图函数里处理key的逻辑能正确解析带斜杠的内容,比如拆分日期部分和文章slug。
内容的提问来源于stack exchange,提问作者Raenald syaputra
相关产品推荐
相关产品推荐

