Django admin是否支持正则URL?re_path能否搭配admin.site.urls使用?
问题解答
首先明确:re_path(即Django旧版的url函数)完全支持挂载admin.site.urls,你遇到的问题不是兼容性问题,而是正则路由的反向解析逻辑导致的。
问题原因
你写的路由re_path(r'^oog\d{3}/', admin.site.urls)用了\d{3}匹配任意三位数字,但Django admin在生成内部跳转URL时,需要反向解析出一个确定的路由前缀。由于你的正则没有指定具体值,admin只能生成一个符合正则规则的默认占位值oog000,而这种动态生成的前缀无法和实际路由匹配,导致访问失败。
解决方案
根据你的需求选择对应方案:
- 固定前缀场景:如果admin前缀是固定的三位数字(比如
oog123),直接写死路径即可,用path更简洁:
或者用path('oog123/', admin.site.urls)re_path:re_path(r'^oog123/', admin.site.urls) - 动态前缀场景:如果必须用动态三位数字前缀,需要给正则添加命名分组,让admin反向解析时能获取到对应参数:
但注意:admin本身的视图不会处理这个额外的re_path(r'^oog(?P<admin_prefix>\d{3})/', admin.site.urls)admin_prefix参数,所以这种场景需要你自行扩展admin视图来接收并处理该参数,否则仍可能出现访问异常,一般不建议给admin设置动态前缀。
内容的提问来源于stack exchange,提问作者Tony.Luo
相关产品推荐
相关产品推荐

