当覆盖类视图的属性时,它附带:
class IndexView(generic.ListView):
template_name = 'polls/index.html'
context_object_name = 'latest_question_list'
我认为它应该是:
class IndexView(generic.ListView):
def __init__(self, *args, **kwargs):
super().__init__(self, *args, **kwargs):
template_name = 'polls/index.html'
context_object_name = 'latest_question_list'
Django如何通过直接赋值变量来实现它?
答案 0 :(得分:1)
您展示的第一个案例是设置类变量的示例。在第二种情况下,您实际上是在定义局部变量,但我假设您打算分配 instance 变量,如下所示:
def __init__(self, *args, **kwargs):
super().__init__(self, *args, **kwargs):
self.template_name = 'polls/index.html'
self.context_object_name = 'latest_question_list'
退房 以及对this stack overflow post和this other one的答案,以便对差异进行一些讨论。
答案 1 :(得分:1)
我没看过Django GenericView的源代码,
您指出的变量是我们可以调用class Variables
的变量,这些变量是类ListView的变量。基本上,它们是所有实例共享的类变量
而在__init__
内,他们被称为instance variable
每个实例都是唯一的
一个小例子(不够好):
class MyView:
template_name = 'default_name.html' # class variable shared by all instances
def __init__(self,name):
self.name = name # instance variable unique to each instance
def get_template_name(self):
return self.name