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

Django自定义Admin URL后跳转异常且旧路径仍可访问求助

解决方案

问题1:Admin内部链接跳转至原始路径

Django Admin内部的URL生成依赖于AdminSite的root_path属性,默认值为空,当你将Admin挂载到自定义路径时,需要手动设置该属性,确保内部链接使用正确的前缀。

修复步骤:

在项目根目录的urls.py中,修改默认admin.site的root_path,与你的自定义URL前缀保持一致:

import os
from django.contrib import admin

# 读取环境变量,默认值为'custom-admin/'
admin_url = os.getenv('SUPERUSER_URL', 'custom-admin/')
# 设置root_path,移除末尾斜杠以匹配Django内部URL生成规则
admin.site.root_path = admin_url.rstrip('/')

urlpatterns = [
    path(admin_url, admin.site.urls),
    # 其他视图路径...
]

问题2:原始/admin/路径仍可访问

这通常是因为urlpatterns中仍保留了默认的Admin路径配置,请检查并删除该条目:

修复步骤:

打开项目根目录的urls.py,查找并删除以下代码行:

path('admin/', admin.site.urls),

确保urlpatterns中只有你自定义的Admin路径条目。

额外注意事项

  • 你的admin.py中存在一处语法错误:admin.modelAdmin应改为admin.ModelAdmin(首字母大写),否则会导致模型注册失败:
# 错误写法
class FooAdmin(admin.modelAdmin):
# 正确写法
class FooAdmin(admin.ModelAdmin):
  • 如果后续需要更灵活的Admin配置(比如自定义站点标题、权限等),可以创建自定义AdminSite类并实例化,替代默认的admin.site,示例如下:
# 在urls.py或单独的admin_site.py中
from django.contrib.admin import AdminSite

class CustomAdminSite(AdminSite):
    site_header = '自定义管理后台'
    site_title = '自定义管理后台'

# 实例化自定义站点
admin_site = CustomAdminSite()

# 注册模型到自定义站点(可在admin.py中导入该实例进行注册)
from yourapp.models import User, Foo
from yourapp.admin import CustomUserAdmin, FooAdmin
admin_site.register(User, CustomUserAdmin)
admin_site.register(Foo, FooAdmin)

# 在urlpatterns中使用自定义站点的urls
urlpatterns = [
    path(admin_url, admin_site.urls),
    # 其他路径...
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 10:05:20