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
相关产品推荐
相关产品推荐

