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

Django中as_view方法的cls和initkwargs是如何传递给view函数的?

Django类视图as_view参数获取逻辑解答

你看到的self = cls(**initkwargs)这行代码里的两个参数,本质是利用了Python的类方法特性和闭包特性传递的,具体逻辑如下:

  • cls来源:as_view是视图类的类方法,按照Python类方法的规则,调用类方法时第一个参数会自动绑定为当前类本身,你在urls.py里写MyView.as_view()的时候,as_view拿到的第一个参数就是MyView类,也就是代码里的cls。
  • initkwargs来源:就是你调用as_view()时传入的自定义关键字参数,比如MyView.as_view(page_size=10, allow_guest=True)里的page_size、allow_guest这类参数都会被收集到initkwargs字典里。
  • 内层view函数获取这两个参数的逻辑:view是定义在as_view内部的嵌套函数(闭包),天然可以访问外层as_view函数作用域里的所有变量,不需要额外传参,哪怕as_view执行完把view返回出去之后,view依然能保留当时拿到的cls和initkwargs值。

你可以参考简化版的as_view实现逻辑理解:

class View:
    @classmethod
    def as_view(cls, **initkwargs):
        # 对传入的initkwargs做合法性校验等前置逻辑
        def view(request, *args, **kwargs):
            # 直接使用外层作用域的cls和initkwargs实例化类
            self = cls(**initkwargs)
            self.setup(request, *args, **kwargs)
            return self.dispatch(request, *args, **kwargs)
        return view

问题辅助说明图

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 08:36:06