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

如何向DjangoAdmin的change_list_results.html传递上下文?重写方法未生效

问题分析与解决方案

首先,你遇到的问题核心是调用父类方法时指定了错误的类,导致自定义的额外上下文没有被正确传递到模板中。

先看你写的这段代码:

def changelist_view(self, request, extra_context=None):
    context = extra_context or {}
    context['econtext'] = 'Extra Context'
    return super(BaseModelAdmin, self).changelist_view(request, extra_context=context)

你的当前类是Admin,但调用super()时传入了BaseModelAdmin作为第一个参数,这会让父类方法无法正确接收你添加的econtext——相当于你的上下文修改没有被纳入到最终的父类方法执行流程里。

具体修复步骤

1. 修正super()的调用方式

在Python 3环境下,推荐直接使用无参数的super(),它会自动识别当前类和实例:

def changelist_view(self, request, extra_context=None):
    context = extra_context or {}
    context['econtext'] = 'Extra Context'
    # 改用无参数super(),自动关联当前Admin类
    return super().changelist_view(request, extra_context=context)

如果需要兼容Python 2,则必须明确传入当前类和self:

return super(Admin, self).changelist_view(request, extra_context=context)

2. 验证模板上下文传递

确认你的change_list_results.html是正确继承/覆盖了Django Admin的对应模板,并且在合适的位置调用{{ econtext }}。你也可以先在changelist_view里打印context,确认econtext已经被成功添加,再去模板中调试。

额外提示

如果你是想给整个变更列表页面(包括结果区域)添加上下文,changelist_view这个方法的选择是完全正确的。另外Django模板的上下文是继承的,只要父模板能拿到econtext,子模板change_list_results.html也能直接访问,所以只要修复super()的调用问题,模板就能正常显示内容了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:01:48