Django二级Admin站点链接跳转至主Admin站点问题如何解决?
问题原因
Django Admin 内部生成链接时,会以 AdminSite 实例的name属性作为命名空间反向解析 URL。你当前将自定义 Admin 站点挂载在设置了app_name = 'dispatch'的URL模块下,相当于给Admin的所有URL额外增加了一层父命名空间dispatch,但Admin内部解析URL时不会自动带上这层前缀,就会解析到根路径下的URL规则,最终跳转到默认主Admin站点。
解决方法
方案1(推荐):调整URL挂载规则
直接在项目根urls.py中挂载自定义Admin站点,避免嵌套多余的父命名空间:
- 先删除
dispatch/urls.py中path('admin/', admin.dispatch_admin_site.urls)这行配置 - 修改根
project/urls.py配置:
from dispatch.admin import dispatch_admin_site # 导入你自定义的Admin站点实例 urlpatterns = [ # 直接挂载自定义Admin,不要套在dispatch的include规则里 path('dispatch/admin/', dispatch_admin_site.urls), path('dispatch/', include('dispatch.urls')), path('admin/', admin.site.urls), ]
方案2:重写AdminSite的反向解析方法
如果一定要把自定义Admin放在dispatch/urls.py中,就重写DispatchAdminSite的reverse方法,强制带上父命名空间前缀:
from django.urls import reverse class DispatchAdminSite(admin.AdminSite): def reverse(self, name, *args, **kwargs): return reverse(f'dispatch:{name}', *args, **kwargs)
两种方案修改完成后,清空浏览器缓存重新访问即可,站点内的链接会自动生成正确的/dispatch/admin/...路径。
内容的提问来源于stack exchange,提问作者bdoubleu
相关产品推荐
相关产品推荐

