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

如何调整Django Admin侧边栏中模块的显示顺序

Django Admin 侧边栏模块自定义排序实现方法

下面给你三种可行的实现方案,按需选择:

方法一:自定义 AdminSite 类(官方原生方案,无依赖)

这是最灵活的原生实现方式,完全可控:

  1. 在项目根目录的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)
  1. 修改项目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),
]

方法二:给应用名称加前缀(简单粗暴,无需改路由)

如果不想动太多代码,只是想调整顺序,可以给应用的显示名称加数字前缀,利用默认的字母排序规则实现排序:

  1. 打开目标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'
  1. 在该app的__init__.py里注册这个配置:
default_app_config = 'website_admin.apps.WebsiteAdminConfig'

注意:这种方法会改变侧边栏里应用的显示名称,要先和客户确认是否接受。

方法三:用第三方库实现拖拽排序(最省心)

如果想让客户自己能在后台拖拽调整顺序,可以用django-admin-sortable2:

  1. 安装库:
pip install django-admin-sortable2
  1. 在settings.py的INSTALLED_APPS里添加:
INSTALLED_APPS = [
    # 其他应用...
    'adminsortable2',
    # 其他应用...
]
  1. 还是在admin.py里继承库的排序站点:
from adminsortable2.admin import SortableAdminSite

class CustomAdminSite(SortableAdminSite):
    pass

custom_admin_site = CustomAdminSite(name='custom_admin')
  1. 同样修改urls.py用这个自定义站点,之后进入Admin后台,就能直接拖拽侧边栏的模块调整顺序了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 16:09:26