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

Django中向as_view()传递参数后视图无法获取参数的问题

解决Django类视图as_view()传递自定义参数无效的问题

这个问题我之前也碰到过,核心原因是:Django的通用类视图(比如ListView)的默认构造函数不会自动处理你传入的自定义参数,所以你在as_view()里传的columns没有被正确赋值到视图实例上,导致self.columns还是类定义里的None。

解决方案:重写视图类的__init__方法

你需要在ChangeListView中重写构造函数,手动接收并赋值columns参数,同时别忘了调用父类的构造函数处理其他默认参数:

from django.views import generic

class ChangeListView(generic.ListView):
    def __init__(self, columns=None, **kwargs):
        # 先调用父类构造函数处理Django自带的参数
        super().__init__(**kwargs)
        # 把传入的columns赋值给实例属性
        self.columns = columns

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        print(self.columns)  # 现在会输出你传入的('username', 'email')元组了
        return context

为什么原来的代码不行?

你原来的视图类里只定义了类属性columns = None,但当你通过as_view(columns=...)传递参数时,这些参数会被传递给视图类的构造函数,而默认的ListView构造函数并不会处理这类自定义参数,所以实例的columns属性始终是类定义的初始值None。

验证你的URL配置

你的URL配置不需要修改,保持原来的写法即可:

url(r'^$', ChangeListView.as_view(columns=('username', 'email')), name="user-list")

这样修改后,当视图被调用时,self.columns就能正确获取到你在as_view()中传入的元组了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:20:32