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

使用Jazzmin模板的Django Admin自定义页面侧边栏缺失问题求助

问题原因
  • 自定义视图仅通过Django原生admin.site.admin_view包装,未注入Jazzmin Admin渲染侧边栏所需的核心上下文数据(如available_apps、site_config等),这些数据是Jazzmin生成完整侧边栏菜单的必要依赖。
  • 普通TemplateView未调用Jazzmin AdminSite的上下文构建方法,导致模板无法获取已注册模型的菜单信息。
解决方法

方法1:改用Jazzmin AdminSite包装视图

修改wrap_admin_view函数,使用Jazzmin专属的AdminSite实例处理视图,自动注入侧边栏所需上下文:

def wrap_admin_view(view, cacheable=False):
    """
    包装需要后台登录验证的视图,适配Jazzmin Admin
    """
    from jazzmin.admin import JazzminAdminSite
    admin_site = JazzminAdminSite()

    def wrapper(*args, **kwargs):
        return admin_site.admin_view(view, cacheable)(*args, **kwargs)

    wrapper.admin_site = admin_site
    return update_wrapper(wrapper, view)

方法2:手动注入Jazzmin上下文数据

如果不想修改包装函数,可在视图的get_context_data中手动添加Jazzmin AdminSite的上下文:

from jazzmin.admin import JazzminAdminSite

class QueueOperationsView(TemplateView):
    template_name = 'dataprocessing/queue_management/queue.html'

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        # 注入Jazzmin Admin所需的上下文数据
        admin_site = JazzminAdminSite()
        context.update(admin_site.each_context(self.request))
        
        # 原有业务逻辑
        admin_client = AdminClient(KAFKA_CONFIG)
        topic_metadata = admin_client.list_topics()
        has_purge_permissions = self.request.user.has_perm('masters.purge_dataprocessingqueuemaster')
        context['topics'] = [i for i in topic_metadata.topics if i not in KAFKA_EXCLUDE_TOPICS]
        context['has_purge_permissions'] = has_purge_permissions
        return context

方法3:将自定义页面注册为Jazzmin自定义菜单(推荐)

直接在Jazzmin配置中添加该页面到侧边栏,同时确保视图被正确包装:

  1. 在项目settings.py的Jazzmin配置中添加自定义菜单:
JAZZMIN_SETTINGS = {
    # 其他已有配置...
    "custom_links": {
        "masters": [{
            "name": "队列管理",
            "url": "admin/queue-management/",
            "icon": "fas fa-tasks",
            "permissions": ["masters.purge_dataprocessingqueuemaster"]
        }]
    }
}
  1. 配合方法1的wrap_admin_view修改,访问页面时侧边栏会自动包含所有已注册模型和自定义菜单。
验证

修改完成后重启Django服务,访问/admin/queue-management/,即可看到包含所有已注册模型的完整侧边栏菜单。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 00:57:28