如何调整Django Admin侧边栏中模块的显示顺序
Django Admin 侧边栏模块自定义排序实现方法
下面给你三种可行的实现方案,按需选择:
方法一:自定义 AdminSite 类(官方原生方案,无依赖)
这是最灵活的原生实现方式,完全可控:
- 在项目根目录的
admin.py里定义自定义的AdminSite类,重写模块排序逻辑:
from django.contrib.admin import AdminSite from django.contrib import admin class CustomAdminSite(AdminSite): def get_app_list(self, request): # 获取默认生成的应用列表 app_list = super().get_app_list(request) # 这里按你想要的顺序写app的label(就是app的文件夹名,或者models里Meta定义的app_label) wanted_order = [ 'website_admin', 'data', 'questions', 'surveys', 'auth' ] # 按自定义规则重新排序,不在列表里的app默认排到最后 ordered_apps = sorted( app_list, key=lambda x: wanted_order.index(x['app_label']) if x['app_label'] in wanted_order else len(wanted_order) ) return ordered_apps # 实例化自定义站点 custom_admin_site = CustomAdminSite(name='custom_admin') # 把你所有的模型注册到这个自定义站点,替换原来的admin.site.register # 比如:from your_app.models import YourModel; custom_admin_site.register(YourModel)
- 修改项目
urls.py,替换默认的admin路由:
from django.urls import path from .admin import custom_admin_site urlpatterns = [ # 删掉原来的path('admin/', admin.site.urls),换成这个 path('admin/', custom_admin_site.urls), ]
方法二:给应用名称加前缀(简单粗暴,无需改路由)
如果不想动太多代码,只是想调整顺序,可以给应用的显示名称加数字前缀,利用默认的字母排序规则实现排序:
- 打开目标app的
apps.py,修改verbose_name:
from django.apps import AppConfig class WebsiteAdminConfig(AppConfig): default_auto_field = 'django.db.models.BigAutoField' name = 'website_admin' verbose_name = '01. Website Admin' # 加前缀让它排第一 class DataConfig(AppConfig): default_auto_field = 'django.db.models.BigAutoField' name = 'data' verbose_name = '02. Data'
- 在该app的
__init__.py里注册这个配置:
default_app_config = 'website_admin.apps.WebsiteAdminConfig'
注意:这种方法会改变侧边栏里应用的显示名称,要先和客户确认是否接受。
方法三:用第三方库实现拖拽排序(最省心)
如果想让客户自己能在后台拖拽调整顺序,可以用django-admin-sortable2:
- 安装库:
pip install django-admin-sortable2
- 在
settings.py的INSTALLED_APPS里添加:
INSTALLED_APPS = [ # 其他应用... 'adminsortable2', # 其他应用... ]
- 还是在
admin.py里继承库的排序站点:
from adminsortable2.admin import SortableAdminSite class CustomAdminSite(SortableAdminSite): pass custom_admin_site = CustomAdminSite(name='custom_admin')
- 同样修改
urls.py用这个自定义站点,之后进入Admin后台,就能直接拖拽侧边栏的模块调整顺序了。
内容的提问来源于stack exchange,提问作者atropa belladona
相关产品推荐
相关产品推荐

