使用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配置中添加该页面到侧边栏,同时确保视图被正确包装:
- 在项目
settings.py的Jazzmin配置中添加自定义菜单:
JAZZMIN_SETTINGS = { # 其他已有配置... "custom_links": { "masters": [{ "name": "队列管理", "url": "admin/queue-management/", "icon": "fas fa-tasks", "permissions": ["masters.purge_dataprocessingqueuemaster"] }] } }
- 配合方法1的
wrap_admin_view修改,访问页面时侧边栏会自动包含所有已注册模型和自定义菜单。
验证
修改完成后重启Django服务,访问/admin/queue-management/,即可看到包含所有已注册模型的完整侧边栏菜单。
内容的提问来源于stack exchange,提问作者Ibrahim Khan
相关产品推荐
相关产品推荐

