Django Admin如何定制App显示顺序
假设我们在一个Django项目中创建了两个应用app1和app2,如下图:
如果我们想修改app的显示顺序(如app2在上,app1在下)应该怎么处理呢?
方法1-自定义app显示名称,添加序号
- 在两个应用的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.py
中INSTALLED_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
其他
- 如果需要在自定义模板中实现app排序,可以使用自定义标签实现,参考链接
- 如果使用
django-simpleui
可以通过SIMPLEUI_CONFIG进行自定义配置菜单显示