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

如何添加自定义Django admin站点且无需给每个URL模式重复加前缀

错误原因

该报错是自定义Django Admin站点的路由反向解析规则不匹配导致的:
自定义AdminSite内部的视图(比如首页的应用列表路由app_list)默认会使用默认Admin的命名空间反向解析路径,你把foo-admin/前缀抽到根路由用include导入后,自定义Admin的所有路由都被嵌套在foo-admin/路径下,但你没有同步修改自定义Admin站点的配置,导致它反向解析路由时还是去找默认/admin/前缀下的路径,最终匹配失败。

修复方案

方案1(推荐):单独声明自定义Admin路由

把自定义Admin的路由和应用普通业务路由拆分,直接在根urls.py中配置前缀:

  1. 根urls.py修改如下:
from my_app.admin import my_app_admin_site # 导入你自定义的Admin站点实例

urlpatterns = [
    path('admin/', admin.site.urls),
    # 单独配置自定义Admin的前缀
    path('foo-admin/', my_app_admin_site.urls),
    # 应用普通业务路由单独导入
    path('', include('my_app.urls')),
]
  1. 在自定义Admin实例的定义文件(一般为my_app/admin.py)中添加根路径配置:
# 假设你的自定义Admin实例是这么定义的,添加site_url配置
my_app_admin_site = admin.AdminSite(name='my_app_admin')
my_app_admin_site.site_url = '/foo-admin/'
  1. my_app/urls.py中删除自定义Admin的路由,仅保留普通业务路由即可:
urlpatterns = [
    path('foo/', views.some_view),
    path('foo/bar/<slug>/', views.MyGenericView.as_view()),
]

方案2:保留当前路由结构的修复方法

如果你一定要把自定义Admin路由放在应用urls.py里统一用include导入,按以下步骤修改:

  1. 在自定义Admin实例的定义中指定独立命名空间:
my_app_admin_site = admin.AdminSite(name='my_app_admin')
  1. 如果你有模板或代码中硬编码了{% url 'admin:xxxx' %}这类反向解析语句,需要统一替换为{% url 'my_app_admin:xxxx' %}。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 16:57:01