在django管理员索引页面中定义自定义app_list

Phi*_*hil 15 django django-admin

我想在django的管理索引页面中定义一个自定义应用程序列表,因为我希望以特定顺序显示应用程序,而不是默认的字母顺序.拖网浏览各种SO帖子似乎还不可能在任何明显的地方声明所需的应用程序顺序(例如admin.py,models.py).

现在,我可以看到django admin的index.html文件包含以下语句:

{% for app in app_list %}
   # do stuff with the app object
Run Code Online (Sandbox Code Playgroud)

所以我想改变它以使用一个名为my_app_list的自定义列表对象.在python中,我将按以下方式执行此操作:

from django.db.models import get_app
my_app_list = [get_app('myapp1'), get_app('myapp2'), ..., get_app('django.contrib.auth')]
for app in my_app_list
   ...
Run Code Online (Sandbox Code Playgroud)

那么我的问题是,如何将上面前两行的等价物编码到我的index.html文件的本地副本中?

或者,或者,我应该插入哪些python源文件,以便变量my_app_list在index.html中可用.

提前致谢.

菲尔

Ada*_*mKG 9

子类django.contrib.admin.site.AdminSite().覆盖.index()方法,并执行以下操作:

class MyAdminSite(django.contrib.admin.site.AdminSite):
    def index(self, request, extra_context=None):
        if extra_context is None:
            extra_context = {}
        extra_context["app_list"] = get_app_list_in_custom_order()
        return super(MyAdminSite, self).index(request, extra_context)
Run Code Online (Sandbox Code Playgroud)

实例化此子类的实例my_admin_site = MyAdminSite(),将模型附加到它(使用通常的my_admin_site.register()),并将其附加到URLconf; 应该这样做.

(我没有试过这个,我基于我对AdminSite源码的阅读.)