...

Django Admin如何定制App显示顺序

假设我们在一个Django项目中创建了两个应用app1和app2,如下图:

如果我们想修改app的显示顺序(如app2在上,app1在下)应该怎么处理呢?

方法1-自定义app显示名称,添加序号

  1. 在两个应用的app.py对应的配置类中,添加verbose_name来定制app显示名称,并添加序号,如下图:

效果如下:

当然添加序号的方式并不优雅。

方法2-自定义AdminSite.get_app_list方法

settings.py中添加以下代码

from django.contrib import admin

admin.AdminSite.get_app_list 

点击get_app_list跳转到对应函数实现,如下图:

可以看到,app_list默认是按app的name字段进行排序的,我们可以重写一个get_app_list方法并覆盖原方法,
假设我们想按照settings.pyINSTALLED_APP列表的顺序排序,如下图:

settings.py中添加以下代码:

from django.contrib import admin

def get_app_list(self, request, app_label=None):
    app_dict = self._build_app_dict(request, app_label)

    app_count = len(INSTALLED_APPS) # 获取app数量

    app_list = sorted(app_dict.values(),
                      key=lambda x: INSTALLED_APPS.index(x['app_label'])
                      if x['app_label'] in INSTALLED_APPS else app_count)
                      # 如果应用标签(如app1, app2, 在INSTALLED_APPS中,则按其索引排,
                      # 否则排最后面

    for app in app_list:
        app["models"].sort(key=lambda x: x["name"])

    return app_list


admin.AdminSite.get_app_list = get_app_list  # 覆盖原有的get_app_list方法

实现效果如下:

方法3-使用插件django-modeladmin-reorder

参考链接: https://github.com/mishbahr/django-modeladmin-reorder

其他

  1. 如果需要在自定义模板中实现app排序,可以使用自定义标签实现,参考链接
  2. 如果使用django-simpleui可以通过SIMPLEUI_CONFIG进行自定义配置菜单显示
posted @ 2023-05-06 15:56  韩志超  阅读(253)  评论(0编辑  收藏  举报