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
相关产品推荐
相关产品推荐

