Django自定义Admin站点报错:找不到'app_list'的反向解析
Django自定义AdminSite访问报错解决
问题场景
自定义AdminSite并注册模型后,访问/myadmin路径时出现反向解析错误,无法找到对应app_label的app_list路由。
代码示例
admin.py
from django.contrib.admin import AdminSite from copy import copy from django.apps import apps from django.contrib import admin from .models.badge import * class MyAdminSite(AdminSite): site_header = 'Monty Python administration' admin_site = MyAdminSite(name="myadmin") admin_site.register(Badge)
urls.py
from dopplleApi.views.admin.common.adminSite import admin_site app_name = 'dopplleApi' urlpatterns = [ #-- default path('', views.index, name='index'), #-- admin path('myadmin/', admin_site.urls), ... ]
错误信息
Reverse for 'app_list' with keyword arguments '{'app_label': 'dopplleApi'}' not found. 1 pattern(s) tried: ['admin/(?P<app_label>auth|authtoken)/$']
问题原因及解决方法
核心原因
自定义AdminSite默认复用Django官方admin的模板,而这些模板中的URL反转使用admin命名空间,但你的自定义站点命名空间是myadmin,导致反向解析时匹配了错误的路由规则。
解决方法
方法一:修改模板中的命名空间
- 在项目
templates目录下创建admin文件夹,复制Django自带的admin模板(路径通常为django/contrib/admin/templates/admin)到该文件夹。 - 打开模板文件(如
index.html、app_index.html等),将所有{% url 'admin:xxx' %}格式的代码替换为{% url 'myadmin:xxx' %}(myadmin为你创建AdminSite时指定的name参数值)。
方法二:复用默认admin命名空间
如果不需要同时使用官方默认admin站点,可将自定义AdminSite的name参数改为admin,直接覆盖默认站点:
# admin.py中修改 admin_site = MyAdminSite(name="admin")
此方法无需修改模板,原模板中的admin:命名空间会自动指向你的自定义站点。
方法三:检查模型所在APP配置
确保Badge模型所在的dopplleApiAPP已添加到settings.py的INSTALLED_APPS中:
# settings.py INSTALLED_APPS = [ ... 'dopplleApi', ... ]
内容的提问来源于stack exchange,提问作者Lenka Pitonakova
相关产品推荐
相关产品推荐

