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

如何在Django非Admin面板视图中传递available_apps及获取应用列表

解决Django非Admin视图获取Admin风格应用列表的问题

为什么你的代码返回空列表?

你直接实例化AdminSite()得到的是一个全新的、未注册任何模型的站点实例,自然拿不到应用列表。Django默认的Admin站点是django.contrib.admin.site,所有你注册到Admin的模型都绑定在这个实例上。

正确实现方式

用默认Admin站点实例

直接调用默认站点的get_app_list方法即可:

from django.contrib.admin import site

def change_view(self, request):
    # ... 你的其他视图逻辑
    context = {
        # ... 其他上下文变量
        'available_apps': site.get_app_list(request)
    }
    return render(request, 'parts/part_form.html', context=context)

如果用了自定义AdminSite

要是你项目里自己定义了AdminSite(比如在某个admin.py里写了class MyAdminSite(AdminSite)并实例化),就用你自己的站点实例:

# 假设自定义站点在myapp/admin.py里
from myapp.admin import my_admin_site

def change_view(self, request):
    # ... 你的其他视图逻辑
    context = {
        # ... 其他上下文变量
        'available_apps': my_admin_site.get_app_list(request)
    }
    return render(request, 'parts/part_form.html', context=context)

额外说明

  • get_app_list会自动根据当前登录用户的权限过滤内容,返回的就是用户在Admin面板里能看到的应用和模型列表,权限逻辑和Admin完全一致。
  • 要是你需要定制应用列表的排序、显示内容,可以直接参考Django源码里AdminSite.get_app_list的实现,自己写过滤和整理逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 08:10:18